sub reapchild { while (waitpid(-1, &WNOHANG) > 0) { pop @pids; } } #### sub reapchild { my ($pid, $index); PID: while (($pid = waitpid(-1, &WNOHANG)) > 0) { foreach my $i (0..$#pids) { if ($pids[$i] == $pid) { splice @pids, $i, 1; next PID; } } warn "Unexpected $pid returned!\n"; } }