por ejemplo de bash: Sólocómo matar procesos y procesos secundarios de python?
kill -9 -PID
os.kill(pid, signal.SIGKILL)
matanza proceso padre.
por ejemplo de bash: Sólocómo matar procesos y procesos secundarios de python?
kill -9 -PID
os.kill(pid, signal.SIGKILL)
matanza proceso padre.
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.
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.
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()
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))
No. 'signal.SIGKILL' es la constante correcta de usar. –
os.kill (pid, 9) me funciona, uso python 2.7 en centos 5.6 –
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. –