## XXX - I use hashes in this type of situation ## because I usually associate more meta data to a pid ## which must be used by the parent when the child ## exits... and delete $hash{ $foo } is cleaner ## than splice() to me :) use POSIX; my %pids; for( 1 .. $numchild ) { my $pid = fork(); ## check if $pid id defined, etc. if( $pid ) { ## parent $pids{ $pid } = 1; } else { do_interesting_stuff(); exit; } } while( ( my $pid = waitpid(-1, POSIX::WNOHANG() ) ) > 0 ){ if( exists $pids{ $pid } ) { delete $pids{ $pid }; } else { print STDERR "Unknown child $pid\n"; } }