首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Windows上使用Python使用整个进程树来杀死进程?

如何在Windows上使用Python使用整个进程树来杀死进程?
EN

Stack Overflow用户
提问于 2022-01-03 11:56:13
回答 1查看 431关注 0票数 0

这是我想在Python中模仿的工作C#代码。

代码语言:javascript
复制
var process = Process.Start("wt", "-w 001");
Thread.Sleep(2000);
process.Kill(entireProcessTree: true);

我试过了,但没用。

代码语言:javascript
复制
process = subprocess.Popen(["wt", "-w 001"])
time.sleep(2)
process.kill()
EN

回答 1

Stack Overflow用户

发布于 2022-01-03 12:28:46

Windows不维护进程树。,因此,如果进程结构被破坏,那么杀死子进程并不总是有效的,例如,因为一个进程只是充当一个“启动程序”,然后终止自己。

具体来说,它将不适用于窗口终端,因为wt.exe将启动WindowsTerminal.exe,然后终止自身。WindowsTerminal.exe启动wsl.execonhost.exe,它们都被终止。最后,剩下3个进程:OpenConsole.exepowershell.exeWindowsTerminal.exe

话虽如此,psutil.Process.children来拯救:

代码语言:javascript
复制
import psutil
import subprocess

process = subprocess.Popen(["wt", "-w 001"])
children = psutil.Process(process.pid).children(recursive=True)
for child in children:
    child.terminate()  # friendly termination
_, still_alive = psutil.wait_procs(children, timeout=3)
for child in still_alive:
    child.kill()  # unfriendly termination
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70565429

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档