@betterworld: ich dachte, man setzt $SIG{CHLD}, damit es beim fork beachtet wird.
wenn es erst dann beachtet wird, wennder prozess zurückkommt, ist ja ein local()
völlig sinnlos bei fork.
aber ich frage mich, wieso es dann in der kommandozeile klappt...
{
local $SIG{CHLD} = "IGNORE";
if (my $pid = fork) {
}
else {
print "child ($$)";
# mach was aufwaendiges
close STDOUT;
close STDERR;
close STDIN;sleep 3;
CORE::exit;
}
}
sleep 420;
der kindprozess ist hier auch erst fertig, wenn der äussere block schon verlassen ist.
trotzdem gibts keinen zombie.
edit: muss mich korrigieren, so kriegt man doch einen zombie. hab ihn wohl nicht entdeckt.
ok, dann ist es zumindest konsistent.