in reply to Signal Handling problems in 5.8

This may actually have nothing to do with Perl itself.
Note that your parent process sleeps for 5 seconds when it detects that the system is no longer able to create new processes. Yet, child processes only sleep for 1 second. So, it is entirely possible that all of them finish before parent wakes up. The reason waitpid() would get a -1 in such a case is because CHLD signal handler gets called asynchronously and if one invocation gets interrupted somewhere before the code section that is responsible for obtaining child's PID, then the very last invocation will loop through and collect all zombies. When control is finally returned to the first invocation of the signal handler and it proceeds to get the PID, it will obviously return -1 because there will be nothing left to collect...

--perlplexer


Updated: fixed typos