my @pids = $get_pidof('fork.pl', 1); #### wait Behaves like the wait(2) system call on your system: it waits for a child process to terminate and returns the pid of the deceased process, or "-1" if there are no child processes. The status is returned in $?. Note that a return value of "-1" could mean that child processes are being automatically reaped, as described in perlipc. #### while (1) { my $completed_pid = waitpid(-1, WNOHANG); if ($completed_pid == -1) { # No more children -- exit loop last; } if ($completed_pid > 0) { print ": $completed_pid is done; $childcnt running\n"; $childcnt--; sleep 1; } }