2010-07-01 25 views
11

Estoy usando una biblioteca de terceros que inicia varios subprocesos. Cuando hay una excepción, me gustaría matar a todos los procesos secundarios. ¿Cómo puedo obtener una lista de pids infantiles?¿Cómo se enumeran todos los procesos secundarios en python?

+0

podría ayudar a decirnos su sistema operativo, ya que esto va a ser dependientes de la plataforma –

+0

¿El POSIX ayudarle? Supongo que a algunas personas les gustaría saber la respuesta de Windows también. – Rowan

+0

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

Respuesta

1

Por lo general, es más seguro registrar los datos de todos sus procesos secundarios cuando los crea. No hay una forma compatible con posix para listar PIDs secundarios. Sé que esto se puede hacer con la herramienta PS.

+2

Sí, esperaba eso. El problema es que no soy yo quien crea los procesos, es la biblioteca de terceros. Oh bien. No es sensacional. – Rowan

+0

¿puedo obtener una aceptación? –

+1

En realidad, su respuesta no es la solución. Realmente necesito saber cómo puedo obtener '' psutil.Process'' para darme recursive '' memory_info'' y '' cpu_percent'', pero mi llamada al subproceso realmente abre otro subproceso (al menos 4 o 5 niveles) y yo no tienen forma de mantener un seguimiento de todos los PID. – Natim

10

No siempre se puede registrar todos los subprocesos que se crean, ya que pueden a su vez crear nuevos procesos que se no están al tanto Sin embargo, es bastante simple de usar psutil encontrarlos:

import psutil 

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

Creo que _parent_ y _current_process_ es el mismo?) – dyomas

+0

Sí, editado para corregir. Gracias @dyomas. –

Cuestiones relacionadas