真的在Windows中杀死一个进程

Eli*_*ght 362 windows

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

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

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

pil*_*lif 317

进程选项卡调用中的"结束进程" TerminateProcess是Windows知道杀死进程的最终方式.

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

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

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

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

  • 虽然我讨厌这是正确答案,但毫无疑问,我认为它比下面的taskkill更正确....愚蠢的越野车司机! (29认同)
  • 这是由其他一些过程引起的,确保初始过程始终在运行.你杀死了你的旧实例,看门狗启动了一个新实例 (8认同)
  • 这个答案根本不是**正确的."结束进程"并不是杀死进程的最终方法,因为它无法杀死服务进程(例如).`taskkill/f`是最终极的. (7认同)
  • 比重启更轻松的是再次注销/开启.仍然失去工作,但也许不是那么多时间. (6认同)
  • TaskKill/f只调用`TerminateProcess` API.它与任务管理器完全相同(尽管如此,你是正确的,具有提升的权限). (5认同)
  • 显然,这不是杀死进程的"最终方式".在Windows中有一些进程,在你用任务管理器销毁它们后,它们就会立即重生,好像什么也没发生......:/ (2认同)

Jos*_*ons 228

taskkill /im myprocess.exe /f
Run Code Online (Sandbox Code Playgroud)

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

taskkill /pid 1234 /f
Run Code Online (Sandbox Code Playgroud)

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

  • 这比任务经理的"结束过程"更有效. (58认同)
  • 只是一张纸条.如果您正在编写用于服务器管理的脚本,这将特别有用.kill.exe(来自NT Res工具包)将导致程序退出,但是如果你安装了崩溃处理程序(特别是windbg),它可能会导致问题,因为操作系统会将被杀死的进程视为已崩溃,并尝试调试它.Taskkill不会导致此问题. (10认同)
  • @lzprgmr - taskkill和"end task"可能都调用相同的底层Windows函数"TerminateProcess"http://msdn.microsoft.com/en-us/library/windows/desktop/ms686714%28v=vs.85%29. ASPX (6认同)
  • 我一直试图强行杀死SugarSync.exe而不必重新启动(因为重新启动SugarSync两次才真正开始使它再次工作),但taskkill/T/F/IM SugarSync.exe不起作用 - 即使它声称"成功" (2认同)
  • 谢谢!当_End Task_拒绝工作时,taskkill / pid 1234 / f确实可以工作!哇! (2认同)
  • @埃迪 这比任务管理器的“结束过程”更有效。我只是用它杀死了一个进程,任务管理器拒绝杀死它。即使它可以在后台运行相同的代码(我并不是说确实如此),您也可以自由地以不同的特权级别运行此命令。 (2认同)

Meh*_*dad 37

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

(右键单击该进程,然后转到Miscellaneous-> Terminator.)

  • 它蓝屏了我的电脑.重启后,该过程消失了.做得好... -.-' (7认同)
  • 不适用于所有流程,我有一个幸存下来的所有选项. (6认同)
  • 找不到多少佐证,因为搜索这个只会产生数百万的免费下载!链接.但它确实做了它所说的,病毒风险等等. (5认同)
  • 不幸的是终结者在v2.39被删除:( (5认同)
  • @Nuzzolilo:好的!右键单击该进程,转到Miscellaneous-> Terminator. (2认同)

Dhr*_*hok 23

JosepStyons是对的.打开cmd.exe并运行

taskkill /im processname.exe /f
Run Code Online (Sandbox Code Playgroud)

如果有错误说,

错误:无法终止带有PID 1234的进程"process.exe".原因:访问被拒绝.

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

  • 以管理员身份运行时,错误会更改.它现在说:`错误:PID 17888(PID 17880的子进程)的进程无法终止.原因:没有任务的实例.它指的是父PID 17880.由于找不到父,它不会杀死孤儿.:( (8认同)

Iai*_*der 22

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

Process Explorer - Windows Sysinternals | Microsoft Docs

  • 这确实提供了更多的信息(以及搜索锁定句柄的一些有限的能力),但是我没有比使用基本任务管理器更多地成功杀死任务.某些进程(如反病毒和SugarSync.exe)只是拒绝死亡. (15认同)

Rob*_*ker 15

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

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

ntsd -pn myapp.exe
Run Code Online (Sandbox Code Playgroud)

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

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

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

  • 当Visual Studio和正在调试的应用程序都挂起时,附加并终止VS的旧实例.杀手可以是VS的新实例,然后可以打开旧项目并允许您继续工作. (2认同)

小智 6

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

AT 12:34 /interactive "C:/procexp.exe"
Run Code Online (Sandbox Code Playgroud)

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

  • 我在尝试此操作时收到以下警告,因此它似乎不再起作用:"警告:由于安全性增强,此任务将在预期但不交互的情况下运行.如果需要交互式任务,请使用schtasks.exe实用程序('schtasks /?'详情)." (4认同)