真的在Windows中杀死一个进程

Really killing a process in Windows

偶尔,Windows机器上的程序会发疯,只是挂起。 所以我将调用任务管理器并点击"结束进程"按钮。 但是,这并不总是有效; 如果我尝试了足够多次,那么它通常会最终死亡,但我真的希望能够立即杀死它。 在Linux上我只能kill -9来保证进程会死掉。

这也可用于编写批处理脚本,编写批处理脚本是编程。

Windows中是否有一些程序或命令会一直杀死进程? 一个免费的第三方应用程序没问题,虽然我更愿意能够在我第一次坐下来的机器上这样做。


进程选项卡上的"结束进程"调用TerminateProcess,这是Windows知道杀死进程的最终方式。

如果它没有消失,它当前锁定等待一些内核资源(可能是一个有缺陷的驱动程序)并且没有任何东西(没有重启)你可以做以使该过程消失。

在以下情况下看看这篇博客文章:http://blogs.technet.com/markrussinovich/archive/2005/08/17/unkillable-processes.aspx

像Linux这样基于Unix的系统也存在这样的问题:如果进程处于所谓的"不间断睡眠"(由top和ps显示为状态D),进程可以在kill -9中存活,此时进程会睡得很好,以至于无法处理输入信号(这是kill所做的 - 发送信号)。

通常,不间断睡眠不应该持续很长时间,但是在Windows下,破坏的驱动程序或损坏的用户空间程序(vfork没有exec)可能会永远在D中睡眠。


1
taskkill /im myprocess.exe /f

"/ f"代表"强制"。
如果你知道PID,那么你可以指定,如:

1
taskkill /pid 1234 /f

还有很多其他选项,只需输入taskkill /?对于他们所有人。"/ t"选项可以杀死进程和任何子进程;这可能对你有用。


Process Hacker有许多方法可以杀死进程。

>
</p>
<p>
(右键单击该进程,然后转到Miscellaneous-> Terminator。)
</p>

<hr>
<p>
JosepStyons是对的。打开cmd.exe并运行
</p>
<div class=

1
taskkill /im processname.exe /f

如果有错误说,

ERROR: The process"process.exe" with PID 1234 could not be
terminated.
Reason: Access is denied.

然后尝试以管理员身份运行cmd.exe。


从sysinternals(现在是Microsoft)获取进程资源管理器

Process Explorer - Windows Sysinternals | Microsoft Docs


一个效果很好的技巧是附加一个调试器,然后退出调试器。

在XP或Windows 2003上,您可以使用开箱即用的ntsd执行此操作:

1
ntsd -pn myapp.exe

ntsd将打开一个新窗口。只需在窗口中键入"q"即可退出调试器并取出该过程。

即使任务管理器似乎无法杀死进程,我也知道这可以工作。

不幸的是,ntsd已经从Vista中移除了,你必须为windows安装免费的debbugging工具以获得合适的调试器。


设置AT命令以将任务管理器或进程资源管理器作为SYSTEM运行。

1
AT 12:34 /interactive"C:/procexp.exe"

如果进程资源管理器在你的根C驱动器中,那么这将打开它作为SYSTEM,你可以杀死任何进程而不会获得任何访问被拒绝错误。将此设置为将来的一分钟,然后它会弹出给你。


仅供参考,您有时可以使用SYSTEM或Trustedinstaller来杀死任务;)

谷歌quickkill_3_0.bat

1
2
sc config TrustedInstaller binPath="cmd /c TASKKILL /F  /IM notepad.exe
sc start"TrustedInstaller"

当ntsd访问被拒绝时,请尝试:

ZeroWave被设计成一个简单的工具,可以提供任何类型过程的多级终止。

由于其简单的安装和非常友好的图形界面,ZeroWave也是一个易于使用的程序。

ZeroWave有三种终止模式,"INSANE"模式可以终止任何可以在Windows上运行的进程。

似乎ZeroWave无法杀死avp.exe


推荐阅读