It looks like the code is setting the $SIG{CHLD} handler to IGNORE, which works on some OS's (traditionally System V ones) but not on others (traditionally BSD ones). What that means is that you have to reap the child yourself. That's not as hard (or as disturbing) as it sounds.
Basicaly, a zombie process is a process that has finished running, but its parent hasn't inquired about its exit status yet. The UNIX interface guarantees that a parent can get this information, so the kernel has to keep the process around in case the parent later asks for it. You can reap the zombie processes by simply asking for the exit status when the child exits, using wait, which just means creating a $SIG{CHLD} handler that calls wait.
For example:
#!/usr/bin/perl $SIG{CHLD} = sub { my $pid = wait; print "Child $pid exited with status $?\n"; }; foreach my $i (1..10) { if (!fork()) { # Child sleep(1); exit($i); } sleep(2); }
In reply to Re: Net::Daemon and zombies
by sgifford
in thread Net::Daemon and zombies
by shushu
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |