Hi,
I'm working with a forked process and I have a problem with:
local SIG{CHLD} = "IGNORE"; to properly kill the forked process when it's
done.
The problem that it works correctly only if I don't use the local()
keyword, but then I alter the SIG{CHLD} for the whole process' life! Here
is the example script that works (please no responds saying "it's bad to
fork", the question is about SIG handlers):
print "Content-type: text/plain\n\n";
$SIG{CHLD} = "IGNORE";
my $cid;
if ($cid = fork) {
print qq{It might take a while before the process $cid will complete
the process. When it's done, it will quit cleanly! Bye...};
} else {
close STDIN;
close STDOUT;
close STDERR;
do_something(1,2,3);
CORE::exit(0);
}
sub do_something{
my @args = @_;
}
Now, if I add do:
local $SIG{CHLD} = "IGNORE";
The process becomes a zombie! Which means that the SIG wasn't affected by
my setting. I have tried to move the setting with local inside the fork -
didn't work either.
I have tried Doug's Sys::Signal:
use Sys::Signal ();
Sys::Signal->set(CHLD => sub {"IGNORE"});
didn't help at all :(
What do I miss?
I use:
Apache 1.3.9-dev / mod_perl 1.21_01-dev / perl-5.00503 / RH 6.0
Doug, I've almost solved the problem without Apache::SubProcess, just the
handers thing left!
Thanks!
_______________________________________________________________________
Stas Bekman mailto:[EMAIL PROTECTED] www.singlesheaven.com/stas
Perl,CGI,Apache,Linux,Web,Java,PC at www.singlesheaven.com/stas/TULARC
www.apache.org & www.perl.com == www.modperl.com || perl.apache.org
single o-> + single o-+ = singlesheaven http://www.singlesheaven.com