2010-07-01 2 views
11

Ich verwende eine Drittanbieter-Bibliothek, die verschiedene Unterprozesse startet. Wenn es eine Ausnahme gibt, möchte ich alle untergeordneten Prozesse beenden. Wie kann ich eine Liste von Kinderpids bekommen?Wie listen Sie alle untergeordneten Prozesse in Python auf?

+0

könnte uns helfen, Ihr Betriebssystem zu erklären, da diese Plattform abhängig –

+0

Does POSIX helfen Ihnen sein wird? Ich nehme an, einige Leute würden gerne die Windows Antwort auch wissen. – Rowan

+0

Siehe: http://Stackoverflow.com/a/4229404/376587 –

Antwort

1

Es ist normalerweise sicherer, die PIDs aller untergeordneten Prozesse zu protokollieren, wenn Sie sie erstellen. Es gibt keine posix-konforme Möglichkeit, untergeordnete PIDs aufzulisten. Ich weiß, dass dies mit dem PS-Tool getan werden kann.

+2

Ja, das habe ich erwartet. Das Problem ist, dass ich nicht die Prozesse erstelle, sondern die Third Party Library. Naja. Es ist kein Showstopper. – Rowan

+0

kann ich akzeptieren? –

+1

Eigentlich ist Ihre Antwort nicht die Lösung. Ich muss wirklich wissen, wie ich '' psutil.Process'' bekomme, um mir rekursives '' memory_info'' und '' cpu_percent'' zu geben, aber mein Aufruf zum Subprozess öffnet tatsächlich einen anderen Subprozess (mindestens 4 oder 5 Level) und ein I habe keine Möglichkeit, alle PIDs im Auge zu behalten. – Natim

10

können Sie nicht immer einloggen, alle Teilprozesse wie sie erstellt werden, da sie wiederum schaffen neue Prozesse bekommen, dass Sie sind mir nicht bewusst. Allerdings ist es ziemlich einfach psutil zu verwenden, um sie zu finden:

import psutil 

current_process = psutil.Process() 
children = current_process.children(recursive=True) 
for child in children: 
    print('Child pid is {}'.format(child.pid)) 
+0

Ich denke _parent_ und _current_process_ ist das gleiche?) – dyomas

+0

Yup, bearbeitet, um zu korrigieren. Danke @dyomas. –