kill(0, $pid) will return true even if the $pid process is a zombie. By setting $SIG{CHLD}='IGNORE'; before forking, you're having the parent process reap the zombie child upon receiving SIGCHLD, causing your call to kill(0, ...) to then work as expected.

I believe (someone correct me please) that the default perl handler for SIGCHLD is to do nothing. It is left up to the programmer to reap the child processes manually (via waitpid, or setting 'IGNORE').

In a loop, testing the aforementioned condition, and killing the childs if the condition is met

Even after killing the children (e.g. kill(9, $pid), though I hope you're nicer with kill(15, $pid)), you still need to reap them. You're doing fine since you set 'IGNORE'.

I believe (someone correct me please) that the default perl handler for SIGCHLD is to do nothing. It is left up to the programmer to reap the child processes manually (via waitpid, or setting 'IGNORE').

When putting a smiley right before a closing parenthesis, do you:

Use two parentheses: (Like this: :) )
Use one parenthesis: (Like this: :)
Reverse direction of the smiley: (Like this: (: )
Use angle/square brackets instead of parentheses
Use C-style commenting to set the smiley off from the closing parenthesis
Make the smiley a dunce: (:>
I disapprove of emoticons
Other