Seite 1 von 1

Unterprogramm killen wenn eigenes Programm beendet wird

Verfasst: Donnerstag 26. Juli 2007, 11:37
von wdsl
Hallo,
wie kann ich es machen das ein Unterprogramm also ein Programm was mit subprocess gestartet wurde automatisch beim Beenden des eigentlichen Programmes beendet wird?

vielen Dank
wdsl

Verfasst: Donnerstag 26. Juli 2007, 11:56
von lutz.horn
Mit Signalen: http://docs.python.org/lib/module-signal.html.

Code: Alles auswählen

#!/usr/bin/env python

import os
import signal
import subprocess

class Killer:
    def handler(self, signum, frame):
        print "killing process", self.pid
        os.kill(self.pid, signum)

    def start(self, command):
        p = subprocess.Popen(command, shell=True)
        self.pid = p.pid
        os.waitpid(p.pid, 0)

if __name__ == "__main__":
    killer = Killer()
    signal.signal(signal.SIGINT, killer.handler)
    killer.start("sleep 60")

Verfasst: Freitag 27. Juli 2007, 00:25
von wdsl
weis nicht ob ich den Quelltext richtig verstanden habe, aber ich glaub wir meinen andere Sachen.

Ich starte ein Unterprogramm, wenn ich das Hauptprogramm beende läuft allerdings das Unterprogramm weiter und das soll nicht sein. So wie ich das verstanden habe wird hier das Hauptprogramm beendet wenn das unterprogramm beendet oder?

mfg
wdsl

Verfasst: Freitag 27. Juli 2007, 06:05
von lutz.horn
wdsl hat geschrieben:So wie ich das verstanden habe wird hier das Hauptprogramm beendet wenn das unterprogramm beendet oder?
Nein, das Unterprogramm (in meinem Beispiel "sleep 60") wird vom Hauptprogramm gestartet. Zuvor wurde im Hauptprogramm für das Signal SIGINT die Handler-Methode "handler" registriert. Empfängt nun das Hauptprogramm dieses Signal, so wird die Handlermethode ausgeführt, die das Unterprogramm mittels dessen PID beendet.

Was meinst Du denn genau damit, dass das Hauptprogramm beendet wird?

Verfasst: Freitag 27. Juli 2007, 09:14
von veers
lutz.horn hat geschrieben: Was meinst Du denn genau damit, dass das Hauptprogramm beendet wird?
Vermutlich hat ihn, genauso wie mich auf den ersten Blick, das self.pid verwirrt ;)