真正杀死Windows中的进程

时间:2020-03-05 18:49:26  来源:igfitidea点击:

有时,Windows计算机上的程序会发疯并挂起。因此,我将调用任务管理器,然后单击"结束进程"按钮。但是,这并不总是有效的。如果我尝试了多次,它通常最终会死掉,但是我真的很想能够立即将其杀死。在Linux上,我可以" kill -9"来确保进程将死亡。

这也可用于编写批处理脚本,并且在编程时编写批处理脚本。

Windows随附某些程序或者命令,该程序或者命令将始终终止进程吗?一个免费的第三方应用程序会很好,尽管我希望能够在我第一次坐下的计算机上执行此操作。

解决方案

回答

taskkill /im myprocess.exe /f

" / f"表示"力"。
如果知道PID,则可以指定该PID,例如:

taskkill /pid 1234 /f

可以输入许多其他选项,只需键入taskkill /?对于他们所有人。 " / t"选项杀死一个进程和所有子进程;这可能对我们有用。

回答

从sysinternals(现在为Microsoft)获取流程浏览器

进程资源管理器Windows Sysinternals |微软文档

回答

Processes-Tab上的" End Process"称为TerminateProcess,这是Windows知道杀死进程的最最终方法。

如果它没有消失,则它当前被锁定在等待某些内核资源(可能是有故障的驱动程序),并且我们什么也无法做(除非重启),否则该过程将消失。

在以下情况下从回溯查看此博客条目:http://blogs.technet.com/markrussinovich/archive/2005/08/17/unkillable-processes.aspx

像Linux这样的基于Unix的系统也存在一个问题,即如果进程处于所谓的"不间断睡眠"(状态为top且ps表示为状态D)中,则进程可以在kill -9中幸存下来,此时进程可以很好地休眠以至于可以t处理传入的信号(这就是发送信号的终止作用)。

通常,不间断的睡眠不应持续很长时间,但在Windows下,损坏的驱动程序或者损坏的userpace程序(不带exec的vfork)可能最终永远停留在D中。

回答

一个行之有效的技巧是添加一个调试器,然后退出调试器。

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

ntsd -pn myapp.exe

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

我知道即使在任务管理器似乎无法终止进程的情况下,此方法也可以工作。

不幸的是,ntsd已从Vista中删除,我们必须为Windows安装(免费)调试工具,以获取合适的调试器。