2011-07-01 51 views

Respuesta

27

Cuando se pasa una negativo PID a kill, lo que realmente envía la señal al proceso grupo por ese número (absoluto). Hace el equivalente con os.killpg() en Python.

-1

debe usar el parámetro de señal 9 para eliminar el árbol de procesos.
root @ localhost: ~ $ pitón
> > > import os
> > > os.kill (pid, 9)

si debe usar signal.SIGKILL constante, se debe utilizar os.killpg (pgid , signal.SIGKILL) para matar el árbol de procesos.

+0

No. 'signal.SIGKILL' es la constante correcta de usar. –

+0

os.kill (pid, 9) me funciona, uso python 2.7 en centos 5.6 –

+3

Sí, 'os.kill (pid, 9)' funciona cuando 'signal.SIGKILL' pasa a ser' 9', que es en la mayoría de las plataformas. Sin embargo, 'signal.SIGKILL' es la constante correcta de usar, y usar' 9' en lugar de 'signal.SIGKILL' no es una mejora ni resuelve de ninguna manera el problema del OP. –

11

Si el proceso principal no es un "grupo de procesos" pero desea eliminarlo con los elementos secundarios, puede usar psutil (https://pythonhosted.org/psutil/#processes). os.killpg no puede identificar pid de un grupo que no sea de proceso.

import psutil 

parent_pid = 30437 # my example 
parent = psutil.Process(parent_pid) 
for child in parent.children(recursive=True): # or parent.children() for recursive=False 
    child.kill() 
parent.kill() 
4

Otra solución si su proceso de no es un grupo de procesos y no quieren usar psutil, es ejecutar este comando shell:

pkill -TERM -P 12345 

Por ejemplo, con

os.system('pkill -TERM -P {pid}'.format(pid=12345)) 
Cuestiones relacionadas