selfhtml.de - Alles für den Webmaster!

 

Empfehlung:

wix.com

Kostenlose Homepage

Besuchen Sie auch:

Jobs:

Perl-Script startet externe Anwendung - Prozess stoppt nicht

Autor: Dominik25
Datum: 06.10.2009 22:14:39

Hallo,
ich habe ein kleines Perl script geschrieben, dass eine externe
Anwendung startet, welches wiederrum je nach Übergabeparameter
allerlei Dinge nach stdout zeilenweise Ausgeben kann (z.B. die Zahl Pi
berechnet) und in vielen Fällen niemals oder nach sehr langer Zeit
endet:

    open(PROGRAMM, "/usr/bin/programm -a $uebergabeparameter |") ||
die "Problem mit Programm aufgetreten: $!";

    while (<PROGRAMM>)

        {
        print "$_<BR>";
        }              
    close (PROGRAMM) || die "Kann Programm nicht beenden: $!";


Im Browser werden die Ausgaben zeilenweise angezeigt. Soweit so gut.
Nur wenn ich den Browser schließe, bzw. den Stop-Button des Browsers
klicke, so läuft der PROGRAMM-Prozess im Hintergrund weiter.
Kann man das Perl-Script irgendwie so anpassen, dass bei Abbruch der
http-Verbindung auch der externe Prozess gekillt wird?

TIA,
Dominik



Re: Perl-Script startet externe Anwendung - Prozess stoppt nicht

Autor: Dominik25
Datum: 06.10.2009 22:39:58

Ich checke nicht, was da vor sich geht: Ich habe mir den Prozessbaum mal angeschaut. Mein Programm läuft als Child-Prozess von meinem Perlscript:

init-+-apache2-+-9*[apache2]                                                                    
     |         `-apache2---script.pl---meinprogramm

Wenn ich nun im Browser die Stop-Taste drücke, verschwindet der script.pl Prozess. Der meinprogramm Prozess existiert nun aber als eigenständiger Prozess und nicht mehr als Childprozess von script.pl oder zumindest apache, sondern ist direkt init unterstellt. Wie passiert das?
Ein einfacher SIGTERM reicht dabei aus, um meinprogramm zu beenden.



Re: Perl-Script startet externe Anwendung - Prozess stoppt nicht

Autor: Dominik25
Datum: 06.10.2009 22:53:11

> Ich checke nicht, was da vor sich geht: Ich habe
> mir den Prozessbaum mal angeschaut. Mein Programm
> läuft als Child-Prozess von meinem Perlscript:
>
>
> init-+-apache2-+-9*[apache2]                                                                    
>
>    
> |        
> `-apache2---script.pl---meinprogramm
>
> Wenn ich nun im Browser die Stop-Taste drücke,
> verschwindet der script.pl Prozess. Der
> meinprogramm Prozess existiert nun aber als
> eigenständiger Prozess und nicht mehr als
> Childprozess von script.pl oder zumindest apache,
> sondern ist direkt init unterstellt. Wie passiert
> das?

Hm, kann man hier die Beiträge eigentlich nicht editieren?

Also ich habe mich jetzt noch mal ein wenig mehr eingelesen. Wenn der Parent-Prozess gekillt wird, dann verwaist der Child-Prozess. Das bedeutet, dass der Init-Prozess diesen erbt, was bei mir ja der Fall ist. Was aber komisch ist: Wenn das passiert (Verwaisung), soll der Child-Prozess angeblich ein SIGHUP bekommen. Ein SIGHUP reicht aber auch aus, um mein Programm zu beenden. Warum beendet es dann nicht?