Thread fork - wie vermeide ich zombies, wenn child länger als der parent läuft? (4 answers)
Opened by Martin at 2010-11-09 16:30

Gast Martin
 2010-11-09 16:30
#142586 #142586
Hallo,

ich habe folgendes Problem bei einem CGI-Script mit Apache2.2 unter Linux. Vielleicht könnt ihr mir da helfen:

Ich will eine Aktion starten, die schon mal eine halbe Stunde dauern kann. Zuerst dachte ich an den folgenden Weg (Pseudocode):

Code (perl): (dl )
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;


Ich 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.

Kann ich die irgendwie vermeiden? Ich würde nur ungerne den Timeout höher setzen oder auf cron-jobs ausweichen.

Der Webserver wird wohl für die nächsten Jahre Linux sein, d.h. auf Portabilität brauche ich wenig Rücksicht nehmen.

Grüße,

Martin

Webserver: Apache 2.2.9
OS: Linux 2.6.16.60 SUSE Enterprise Server 10 SP2
Perl: 5.10.0 64bit von Activestate
Last edited: 2010-11-09 16:37:40 +0100 (CET)

View full thread fork - wie vermeide ich zombies, wenn child länger als der parent läuft?