in reply to Killing a hanging child process

Hi Ovid,

What sgifford said makes a lot of sense:

    You can also do tricks with double-fork'ing to arrange for the process to be a child of init(8)

because I was using this trick just today, in a situation where I was trying to disassociate a Perl script from its calling CGI process.  The trick he mentions isn't too difficult, though:

sub spawn_process { my $pid = fork; defined($pid) or die "Failed first fork of child process\n"; # Parent waitpid $pid, 0; # This will happen momentarily return; # Child my $kid = fork; defined($kid) or die "Failed second fork of grandchild process\n"; $kid and exit; # Grandchild perform_my_tasks(); exit; # All your grandchildren are belong to init! }

The nice thing about this is that it lets the parent wait for the child process, which quickly exits, and then go on its way doing more processing.  Meanwhile the grandchild process is inherited by init, and doesn't need to be waited for.


s''(q.S:$/9=(T1';s;(..)(..);$..=substr+crypt($1,$2),2,3;eg;print$..$/