как убить процесс и дочерние процессы из python?

17

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

kill -9 -PID 

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

    
задан Bdfy 01.07.2011 в 17:00
источник

4 ответа

27

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

    
ответ дан Thomas Wouters 01.07.2011 в 17:06
источник
10

Если родительский процесс не является «группой процессов», но вы хотите убить его с помощью детей, вы можете использовать psutil ( Ссылка ). os.killpg не может идентифицировать pid не-process-group.

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()
    
ответ дан jung rhew 20.11.2014 в 08:55
источник
4

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

pkill -TERM -P 12345

Например,

os.system('pkill -TERM -P {pid}'.format(pid=12345))
    
ответ дан ther 01.05.2016 в 20:30
источник
-1

вы должны использовать параметр сигнала 9, чтобы убить дерево процессов.
root @ localhost: ~ $ python
& GT; & GT; & GT; import os
& GT; & GT; & GT; os.kill (pid, 9)

если вы должны использовать signal.SIGKILL константу, вы должны использовать os.killpg (pgid, signal.SIGKILL), чтобы убить дерево процессов.

    
ответ дан Alan Shi 01.07.2011 в 17:15
источник