本文介绍了subprocess:删除Windows中的子进程的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!
问题描述
在 Windows 上,subprocess.Popen.terminate
调用 win32 的 TerminalProcess
.但是,我看到的行为是我试图终止的进程的子进程仍在运行.这是为什么?如何确保进程启动的所有子进程都被杀死?
On Windows, subprocess.Popen.terminate
calls win32's TerminalProcess
. However, the behavior I see is that child processes of the process I am trying to terminate are still running. Why is that? How do I ensure all child processes started by the process are killed?
推荐答案
通过使用psutil:
import psutil, os
def kill_proc_tree(pid, including_parent=True):
parent = psutil.Process(pid)
children = parent.children(recursive=True)
for child in children:
child.kill()
gone, still_alive = psutil.wait_procs(children, timeout=5)
if including_parent:
parent.kill()
parent.wait(5)
me = os.getpid()
kill_proc_tree(me)
这篇关于subprocess:删除Windows中的子进程的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!
本站部分内容来源互联网,如果有图片或者内容侵犯了您的权益,请联系我们,我们会在确认后第一时间进行删除!