Waits for a particular child process to terminate and returns the pid of
the deceased process, or -1
if there is no such child process. On some
systems, a value of 0 indicates that there are processes still running.
The status is returned in $?
. If you say
use POSIX ":sys_wait_h"; #... do { $kid = waitpid(-1, WNOHANG); } until $kid > 0;
then you can do a non-blocking wait for all pending zombie processes.
Non-blocking wait is available on machines supporting either the
waitpid(2) or wait4(2) system calls. However, waiting for a particular
pid with FLAGS of 0
is implemented everywhere. (Perl emulates the
system call by remembering the status values of processes that have
exited but have not been harvested by the Perl script yet.)
Note that on some systems, a return value of -1
could mean that child
processes are being automatically reaped. See perlipc for details,
and for other examples.