wait will sit and sleep until SIGCHLD triggers from any source. If you want to wait for a specific child, use waitpid.
My pet idiom for waiting for multiple kids is this:
my %family_bible = ();
# @todo is an array of coderefs sub () {...;return $status}
for (@todo) {
my $kid;
defined $kid = fork or last;
$kid or exit &$_;
$family_bible{$kid}++;
}
delete $family_bible{-wait} while %family_bible;
If the kids need arguments, or you need to check their exit status, you'll need to modify the control structures. The family_bible hash makes the wait strategy insensitive to ordering (as it must be) and provides a convenient control structure for knowing when you're done.
There are, of course, CPAN modules to handle all this for you. Parallel::ForkManager is one I recommend.
After Compline, Zaxo
|