http://www.perlmonks.org?node_id=624478


in reply to Re^2: How Can I Reliably Cleanup Sockets in a Backgrounded Program?
in thread How Can I Reliably Cleanup Sockets in a Backgrounded Program?

I believe Moron meant that your $SIG{CHILD} = 'IGNORE' instruction should be avoiding zombification of your children, but it's not, and that you should read perlipc for more information on how to build a reliable reaper for your dead processes. Something like (from perlipc itself):

use POSIX ":sys_wait_h"; sub REAPER { my $child; while (($child = waitpid(-1,WNOHANG)) > 0) { $Kid_Status{$child} = $?; } $SIG{CHLD} = \&REAPER; # still loathe sysV } $SIG{CHLD} = \&REAPER; # do something that forks...

But you should check with him, anyways :-)

I myself don't think the nohup command will behave as you might expect, and you should look for daemonization solutions for your program to keep working even if you disconnect. Look for "Complete Dissociation of Child from Parent" again in perlipc.

Hope this helps!

  • Comment on Re^3: How Can I Reliably Cleanup Sockets in a Backgrounded Program?
  • Download Code

Replies are listed 'Best First'.
Re^4: How Can I Reliably Cleanup Sockets in a Backgrounded Program?
by Moron (Curate) on Jul 03, 2007 at 11:42 UTC
    Yes that is exactly what I meant on both counts - thanks for helping out - I wasn't sure exactly where to start elaborating when someone says they understand zero of what I am saying - it is probable that the OP didn't write the code he is presenting and so difficult to know at what level to start explaining.
    __________________________________________________________________________________