in reply to Net::Daemon and zombies
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); }
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re: Re: Net::Daemon and zombies
by shushu (Scribe) on Sep 23, 2003 at 07:00 UTC | |
by sgifford (Prior) on Sep 23, 2003 at 18:59 UTC | |
by sgifford (Prior) on Sep 24, 2003 at 04:16 UTC |