2010-07-01 3 views
11

J'utilise une bibliothèque tierce qui démarre divers sous-processus. Quand il y a une exception, j'aimerais tuer tous les processus enfants. Comment puis-je obtenir une liste de pids d'enfants?Comment lister tous les processus enfants en python?

+0

pourrait aider à nous dire votre système d'exploitation, car cela va dépendre la plate-forme –

+0

Est-ce que vous aide Posix? Je suppose que certaines personnes aimeraient connaître la réponse de Windows aussi. – Rowan

+0

Voir: http://stackoverflow.com/a/4229404/376587 –

Répondre

1

Il est généralement plus sûr de consigner les pids de tous vos processus enfants lorsque vous les créez. Il n'y a pas de moyen compatible avec Posix pour lister les PID enfants. Je sais que cela peut être fait avec l'outil PS.

+2

Oui, je m'y attendais. Le problème est que ce n'est pas moi qui crée les processus, c'est la bibliothèque tierce. Tant pis. Ce n'est pas un showstopper. – Rowan

+0

puis-je obtenir un accepter? –

+1

En fait, votre réponse n'est pas la solution. J'ai vraiment besoin de savoir comment je peux obtenir '' psutil.Process'' pour me donner récursif '' memory_info'' et '' cpu_percent'' mais mon appel au sous-processus ouvre réellement un autre sous-processus (au moins 4 ou 5 niveaux) n'ont aucun moyen de garder une trace de tous les PID. – Natim

10

Vous ne pouvez pas toujours vous connecter tous les sous-processus car ils sont créés, car ils peuvent à leur tour créer de nouveaux processus que vous ne sont pas au courant. Cependant, il est assez simple à utiliser psutil pour les trouver:

import psutil 

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

Je pense que _parent_ et _current_process_ est le même?) – dyomas

+0

Yup, édité pour corriger. Merci @dyomas. –

Questions connexes