2016-04-28 15 views
1

Was ich will? Erstellen Sie ein Skript, das ein Kommunikationsprotokoll startet und beendetKill einen erstellten Subprozess und alle von ihm erstellten Prozesse

Was habe ich? Ich habe ein Python-Skript, das ein Shell-Skript öffnet, und dieses Shell-Skript initialisiert das Protokoll. Wenn ich den Elternprozess erledige, läuft alles gut (aber im letzten Projekt muss der Elternprozess am Leben bleiben), aber wenn ich den Subprozess abbringe, wird es eine Zombiefunktion und mein Protokoll läuft weiter.

Probleme Ich kann glauben, sein: Ich "Tötung" das Shell-Skript bin (nicht das Protokoll, das ist, was ich will)

Die Linie I das Shell-Skript starten:

`protocolProcess = subprocess.Popen(["sh", arquivo], cwd = localDoArquivo) #inicia o protocolo` 

protocolProcessPID = protocolProcess.pid #armazena o pid do protocolProcess 

Die Linie Ich töte das Shell-Skript: os.kill(protocolPID, signal.SIGTERM)

Nun, das ist es! Wenn mir jemand helfen kann, bin ich sehr dankbar

+0

verwandt: [Wie ein Python-Subprozess beendet wird, der mit shell = True gestartet wird] (http://stackoverflow.com/q/4789837/4279) – jfs

Antwort

1

Zombie-Prozesse sind Prozesse, die noch nicht vom übergeordneten Prozess erfasst wurden.

Der übergeordnete Prozess wird diese Prozesshandler bis zum Ende der Zeit oder bis zum Lesen des Prozess-Exit-Status beibehalten oder er selbst wird beendet.

Es hört sich so an, als ob der Parent-Prozess einen besseren Umgang damit hat, wie er seine Kinder hervorbringt und erntet. Ein Kindprozess einfach zu töten ist nicht genug, um einen Zombieprozess zu befreien.

+0

Gibt es einen richtigen und empfohlenen Weg, um es zu starten und zu beenden ?? –

+0

@FernandoSantos: Mach dir keine Sorgen über Zombies, es sei denn, es gibt viele von ihnen. Siehe [Was ist für einen Prozess und warum wird es nicht getötet?] (Http://askubuntu.com/q/201303/3712) – jfs

+0

Sie sollten die Funktion terminate() verwenden, um das Kind zu töten. Und benutze die Umfrage, bis der Prozess beendet ist. Sobald der Prozess gestorben ist und Sie den Return-Code gelesen haben, sollte er den Zombie-Prozess verbrauchen. – sverasch