#!/opt/perl/bin/perl # This is the simple child-process subroutine. sub ABC { sleep(2); print "abc with counter = $counter.\n"; } # This section spawns the initial 6 children. for ($counter = 1; $counter <= 6; $counter++) { $pid = fork(); if ($pid) # parent { $child{$pid} = $counter; $procnum[$counter] = $pid; print "forked process $counter.\n"; } else # child { ABC(); exit $counter; } } # This section spawns additional children 7-20. $diecount = 0; while ($counter <= 20) { $doneproc = wait(); $doneval = $? >> 8; $pid = fork(); if ($pid) # parent { $child{$pid} = $counter; print "child $doneval ($doneproc) exited, forking process $counter.\n"; $counter++; $diecount++; } else # child { ABC(); exit $counter; } } # This section waits for all children to die. while ($diecount <= 20) { wait(); $diecount++; } print "exiting.\n";