Leser: 23
1 2 3 4 5 6 7
# ... my $pid = fork; if( $pid ) { $self->call_long_lasting_method; exit; } $self->send_output_back_to_browser_and_reload_until_child_is_finished;
Linux Programmer's Manual, wait(2)[...]
POSIX.1-2001 specifies that if the disposition of SIGCHLD is set to SIG_IGN or the SA_NOCLDWAIT flag is set for SIGCHLD (see sigaction(2)), then children that terminate do not become zombies and a call to wait() or waitpid() will block until all children have terminated, and then fail with errno set to ECHILD.
[...]
$SIG{CHLD} = 'IGNORE'
Guest MartinIch kann den Parent Prozess nicht beliebig lang laufen lassen, weil der sonst vom Apache nach einer gewissen Zeit gekillt wird, d.h. ein normaler Sig-Child-Reaper fällt flach. Da der Parent-Prozess jedoch vor dem Child-Prozess beendet wird, bekomme ich Zombie-Prozesse.
2010-11-11T09:42:54 torsten[...]
In diesem Fall hilft unter Linux $SIG{CHLD}='IGNORE'. Unter vielen anderen Unices funktioniert das aber auch nicht. Das bedeutet nämlich eigentlich nur, Du bist nicht interessiert an dem Signal, nicht dass Du die Status-Info selbst nicht brauchst.