2010-07-01 17 views
11

Sto usando una libreria di terze parti che avvia vari sottoprocessi. Quando c'è un'eccezione mi piacerebbe uccidere tutti i processi figli. Come posso ottenere un elenco di pid child?Come si elencano tutti i processi figli in python?

+0

potrebbe aiutare per dirci il vostro sistema operativo, dal momento che questo sta per essere dipendente dalla piattaforma –

+0

non POSIX aiuto? Presumo che alcune persone vorrebbero conoscere anche la risposta di Windows. – Rowan

+0

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

risposta

1

In genere è più sicuro registrare i pid di tutti i processi figli quando li si crea. Non esiste un modo conforme a posix per elencare i PID figli. So che questo può essere fatto con lo strumento PS.

+2

Sì, me l'aspettavo. Il problema è che non sono io a creare i processi, è la libreria di terze parti. Oh bene. Non è un fermo-arresto. – Rowan

+0

posso ottenere un accetto? –

+1

In realtà la tua risposta non è la soluzione. Ho davvero bisogno di sapere come posso ottenere '' psutil.Process'' per darmi ricorsivi '' memory_info'' e '' cpu_percent'', ma il mio richiamo ai sottoprocessi in realtà apre altri sottoprocessi (almeno 4 o 5 livelli) un I non c'è modo di tenere traccia di tutte le PID. – Natim

10

Non è possibile accedere sempre tutti i sotto-processi in cui sono creati, dal momento che possono a loro volta creare nuovi processi che si non sono a conoscenza di Tuttavia, è abbastanza semplice da usare psutil per trovarli:

import psutil 

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

Penso che _parent_ e _current_process_ sia lo stesso?) – dyomas

+0

Sì, modificato per correggere. Grazie a @dyomas. –

Problemi correlati