Как убить процесс и дочерние процессы из Python? - PullRequest
22 голосов
/ 01 июля 2011

например из bash:

kill -9 -PID 

os.kill(pid, signal.SIGKILL) уничтожить только родительский процесс.

Ответы [ 4 ]

30 голосов
/ 01 июля 2011

Когда вы передаете отрицательный PID kill, он фактически отправляет сигнал процессу group по этому (абсолютному) числу.Вы делаете эквивалент с os.killpg() в Python.

20 голосов
/ 20 ноября 2014

Если родительский процесс не является «группой процессов», но вы хотите уничтожить его с помощью детей, вы можете использовать psutil (https://pythonhosted.org/psutil/#processes). os.killpg не может идентифицировать pid группы, не являющейся процессом.

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 голосов
/ 01 мая 2016

Другое решение, если ваш процесс не является группой процессов и вы не хотите использовать psutil , это запустить команду оболочки:

pkill -TERM -P 12345

Например, с

os.system('pkill -TERM -P {pid}'.format(pid=12345))
0 голосов
/ 01 июля 2011

Вы должны использовать параметр сигнала 9 для уничтожения дерева процессов.root @ localhost: ~ $ python>>> импорт ОС>>> os.kill (pid, 9)если вам нужно использовать константу signal.SIGKILL, вы должны использовать os.killpg (pgid, signal.SIGKILL) для уничтожения дерева процессов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...