2014-08-28 9 views
11

mir 5 verschiedene Prozesse aus einem Python-Skript, das Laichen, wie folgt aus:Kill-Kind-Prozess, wenn Eltern in Python getötet

p = multiprocessing.Process(target=some_method,args=(arg,)) 
p.start() 

Mein Problem ist, wenn irgendwie der Eltern-Prozess (das Hauptskript) bekommt getötet, laufen die Kindprozesse weiter.

Gibt es eine Möglichkeit, Kinderprozesse, die auf diese Art entstehen, zu töten, wenn der Elternteil getötet wird?

EDIT: Ich versuche dies:

p = multiprocessing.Process(target=client.start,args=(self.query_interval,)) 
p.start() 
atexit.register(p.terminate) 

Aber dies scheint nicht

+3

Doppelt? http://stackoverflow.com/questions/14128410/killing-child-process-when-parent-crashes-in-python – theAlse

+0

Ich hatte diesen Beitrag durchgespielt, es spricht speziell über 'Popen' und Subprozess –

+0

Wie verarbeitet der Elternteil getötet werden? – Korem

Antwort

3

Das Kind zu arbeiten, ist nicht von dem Tod seiner Eltern mitgeteilt, es funktioniert nur in die andere Richtung.

Wenn jedoch ein Prozess stirbt, werden alle Dateideskriptoren geschlossen. Und das andere Ende einer Pipe wird darüber benachrichtigt, wenn sie es zum Lesen auswählt.

So können Ihre Eltern eine Pipe erstellen, bevor Sie den Prozess erstellen (oder Sie können stdin einfach als Pipe einrichten), und das Kind kann diese zum Lesen auswählen. Es wird berichtsbereit sein, wenn das übergeordnete Ende geschlossen ist. Dies erfordert, dass Ihr Kind eine Mail-Schleife ausführt oder zumindest regelmäßige Anrufe zur Auswahl ausführt. Wenn Sie das nicht wollen, brauchen Sie einen Manager-Prozess, aber wenn dieser getötet wird, brechen die Dinge wieder.

12

Ich habe das gleiche Problem selbst begegnen, habe ich folgende Lösung bekam:

vor p.start() Aufruf, können Sie p.daemon=True gesetzt. Dann wie hier erwähnt python.org multiprocessing

Wenn ein Prozess beendet wird, versucht es, alle seiner Daemonic Child-Prozesse zu beenden.

Verwandte Themen