my $kidpid = 0; my $jobs_to_fork = 3; my $i_am_the_master = 0; my $samps = 0; my $last_no = 10; my $i = 0; for ($i = 1; $i <= $jobs_to_fork; $i++) { $kidpid = fork_me($kidpid); print "$i. kidpid:$kidpid\n"; } if ($kidpid == 0) { $i_am_the_master = 1; } else { $i_am_the_master = 0; } sleep (3); if ($i_am_the_master) { print "I will look after my children\n"; } else { printf ("I am a child %6d running the program.\n", $kidpid); while ($samps < 1000000) { $rnd_no = int(rand($last_no+1)); $samps++; $total = $total+$rnd_no; } printf ("%6d: %d %f\n", $kidpid, $samps, ($total / $samps)); } sub fork_me { my $kpid = $_[0]; if ($kpid == 0) { $kpid = fork(); # the master perserves himself and start another thread } return($kpid); # the child sill just return to go do his job }