真正杀死Windows中的进程
有时,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安装(免费)调试工具,以获取合适的调试器。