如何从python中杀死进程和子进程?

Bdf*_*dfy 23 python

例如来自bash:

kill -9 -PID 

os.kill(pid, signal.SIGKILL) 只杀死父进程.

Tho*_*ers 30

当您将 PID 传递给kill它时,它实际上通过该(绝对)数字将信号发送到进程.你os.killpg()在Python中做了相同的事情.

  • os.killpg()在Windows上不可用 (2认同)
  • @CharlieParker,使用“kill -9 -17351”来终止组进程,而不是“kill -9 17351”来仅终止父进程。/sf/ask/27441571/ (2认同)

jun*_*hew 26

如果父进程不是"进程组"但您想要使用子进程终止它,则可以使用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()
Run Code Online (Sandbox Code Playgroud)


the*_*her 5

如果您的进程不是进程组并且您不想使用psutil,则另一种解决方案是运行此shell命令:

pkill -TERM -P 12345
Run Code Online (Sandbox Code Playgroud)

比如说

os.system('pkill -TERM -P {pid}'.format(pid=12345))
Run Code Online (Sandbox Code Playgroud)