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
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) |