class god; method fork_kids { my $row = $db->find_new_process_table_entries(); if (not fork()) { my $runner = runner->new($row); #1 $runner->run(); } } class runner; method new { $self->{row} = shift; } method run { $man = thaw $self->{row}->{column}; $man->run($self); %{$man} = %{$self} = (); #2 exit(); } method saveState() { my $state = shift; $db->saveState( nfreeze($state) ); $self->{row}->{state} = $state; #3 } class man { method run { my $mom = shift; while ($alive) { $mom->saveState($state); ... } }