Unterprogramm killen wenn eigenes Programm beendet wird

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
wdsl
User
Beiträge: 35
Registriert: Donnerstag 22. Februar 2007, 16:26

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
Benutzeravatar
lutz.horn
User
Beiträge: 205
Registriert: Dienstag 8. November 2005, 12:57
Wohnort: Pforzheim

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")
https://www.xing.com/go/invite/18513630.6a91d4
wdsl
User
Beiträge: 35
Registriert: Donnerstag 22. Februar 2007, 16:26

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
Benutzeravatar
lutz.horn
User
Beiträge: 205
Registriert: Dienstag 8. November 2005, 12:57
Wohnort: Pforzheim

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?
https://www.xing.com/go/invite/18513630.6a91d4
Benutzeravatar
veers
User
Beiträge: 1219
Registriert: Mittwoch 28. Februar 2007, 20:01
Wohnort: Zürich (CH)
Kontaktdaten:

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