in reply to forking subroutines?

ok, I've read the two above replies, and figured out a bare-bones (no error checking) way to do it. This program launches subroutine "ABC" a total of 20 times, but is only allowed to launch 6 at a time.
#!/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 $cou +nter.\n"; $counter++; $diecount++; } else # child { ABC(); exit $counter; } } # This section waits for all children to die. while ($diecount <= 20) { wait(); $diecount++; } print "exiting.\n";

BazB added code tags.