真正杀死Windows中的进程
Posted
技术标签:
【中文标题】真正杀死Windows中的进程【英文标题】:Really killing a process in Windows 【发布时间】:2010-09-08 04:15:47 【问题描述】:Windows 机器上的程序有时会发疯而挂起。所以我会调用任务管理器并点击“结束进程”按钮。但是,这并不总是有效。如果我尝试足够多次,那么它通常最终会死掉,但我真的很想能够立即杀死它。在 Linux 上,我可以只用kill -9
来保证进程会死掉。
这也可以用来写批处理脚本,写批处理脚本就是编程。
是否有一些程序或 Windows 附带的命令总是会杀死一个进程?一个免费的第三方应用程序就可以了,虽然我更喜欢能够在我第一次坐下的机器上做到这一点。
【问题讨论】:
杂散进程是编程中很常见的问题,我不得不不同意;这不是题外话。 作为开发人员,我每天都在处理流程管理。这完全是我的话题! 我强烈建议不要删除这个问题。 +195,对于所涉及的问题,这是一个非常早期的谷歌点击。 “除非它们直接涉及主要用于编程的工具”我遇到了关于 Visual Studio 保持进程运行的问题,这让我无法杀死它。关闭 Visual Studio 有助于终止有问题的进程。 您可以使用Stop-Process powershell cmdlet。 【参考方案1】:“进程”选项卡上的“结束进程”调用TerminateProcess
,这是 Windows 知道终止进程的最终极方式。
如果它没有消失,则它当前被锁定在等待某些内核资源(可能是有问题的驱动程序),并且没有任何方法(除了重新启动)可以使进程消失。
看看这个来自 Wayback 的博客条目:http://blogs.technet.com/markrussinovich/archive/2005/08/17/unkillable-processes.aspx
像 Linux 这样的基于 Unix 的系统也存在这样的问题,即如果进程处于所谓的“不间断睡眠”(由 top 和 ps 显示为状态 D
),则进程可以在 kill -9
中存活,此时进程睡眠所以好吧,他们无法处理传入的信号(这是kill
所做的 - 发送信号)。
通常,不间断睡眠不应该持续很长时间,但与在 Windows 下一样,损坏的驱动程序或损坏的用户空间程序(vfork
没有exec
)最终可能会永远在D
中休眠。
【讨论】:
虽然我讨厌这是正确的答案,但毫无疑问,它比下面的 taskkill 更正确......愚蠢的越野车司机! 再次注销/重新启动比重新启动更烦人。仍然会失去工作,但也许没有那么多时间。 这是由其他确保初始进程始终运行的进程引起的。你杀死了你的旧实例,并且看门狗已经启动了一个新实例 这个答案完全不正确。 “结束进程”不是杀死进程的最终方法,因为它不能杀死服务进程(例如)。taskkill /f
是最极致的。
TaskKill /f 只调用TerminateProcess
API。它与任务管理器完全相同(不过,您是对的,具有提升的权限)。【参考方案2】:
taskkill /im myprocess.exe /f
“/f”代表“强制”。 如果您知道 PID,那么您可以指定它,如下所示:
taskkill /pid 1234 /f
许多其他选项都是可能的,只需键入 taskkill /?为他们所有人。 "/t" 选项杀死一个进程和所有子进程;可能对你有用。
【讨论】:
只是一个注释。如果您正在编写用于服务器管理的脚本,这将特别有用。 kill.exe(来自 NT Res 工具包)将导致程序退出,但如果您安装了崩溃处理程序(尤其是 windbg),它可能会导致问题,因为操作系统会将被杀死的进程视为崩溃并尝试调试它。 Taskkill 不会导致这个问题。 @lzprgmr - taskkill 和“结束任务”可能都调用相同的底层 Windows 函数“TerminateProcess”msdn.microsoft.com/en-us/library/windows/desktop/… 这并不比任务管理器中的“结束进程”更有效。 我一直试图强制杀死 SugarSync.exe 而无需重新启动(因为在真正开始之前重新启动 SugarSync 两次使其再次工作),但是 taskkill /T /F /IM SugarSync.exe不起作用——即使它声称“成功” 谢谢!当 End Task 拒绝工作时,taskkill /pid 1234 /f
确实有效!哇!【参考方案3】:
Process Hacker 有多种杀死进程的方法。
(右键单击该进程,然后转到杂项->终结者。)
【讨论】:
找不到太多的佐证,因为搜索这个只会产生数百万免费下载!!!链接。但它确实做到了它所说的,病毒风险等等。 @Nuzzolilo:当然!右键单击该进程,转到 Miscellaneous->Terminator。 不适用于所有进程,我有一个可以在所有选项中幸存下来。 它蓝屏了我的电脑。重新启动后该过程消失了。干得好...-.-' 不幸的是终结者在 v2.39 中被删除了:(【参考方案4】:JosepStyons 是对的。打开cmd.exe运行
taskkill /im processname.exe /f
如果说有错误,
错误:无法使用 PID 1234 的进程“process.exe” 终止。 原因:访问被拒绝。
然后尝试以管理员身份运行 cmd.exe。
【讨论】:
以管理员身份运行,错误发生变化。它现在说:ERROR: The process with PID 17888 (child process of PID 17880) could not be terminated. Reason: There is no instance of the task.
,它指的是父 PID 17880。由于找不到父,它不会杀死孤儿。 :(
“如果有任何子进程成功杀死你的进程,你也必须杀死子进程”试试这个***.com/questions/12528963/…
在我的例子中,我告诉它杀死的僵尸进程是唯一的子进程并且没有父进程,尽管僵尸进程仍然认为它有父进程。在我的情况下,通过使用 Windows 8.1 设置高级修复系统路径解决,但取消实际擦除任何磁盘,只是进行完全强制重启。定期关机和重启实际上是睡眠/休眠(以节省启动时间)。让它进行 full 关机并非易事。
“访问被拒绝”表示该进程已经处于关闭过程中。例如,如果您刚刚尝试将其关闭。您需要等到它关闭。
管理员权限下的taskkill结果:访问被拒绝。【参考方案5】:
从 sysinternals(现为 Microsoft)获取进程资源管理器
Process Explorer - Windows Sysinternals | Microsoft Docs
【讨论】:
这确实提供了更多信息(以及一些有限的搜索锁句柄的能力),但我在杀死任务方面并没有比使用基本任务管理器更成功。某些进程(如防病毒和 SugarSync.exe)只是拒绝死亡。【参考方案6】:一个很好的技巧是附加一个调试器,然后退出调试器。
在 XP 或 Windows 2003 上,您可以使用开箱即用的 ntsd 执行此操作:
ntsd -pn myapp.exe
ntsd 将打开一个新窗口。只需在窗口中输入“q”即可退出调试器并退出进程。
我知道即使任务管理器似乎无法终止进程,它也能正常工作。
很遗憾,ntsd 已从 Vista 中删除,您必须安装(免费)debbugging tools for windows 才能获得合适的调试器。
【讨论】:
非常感谢。将“-c q”(不带引号)添加到自动退出,这使其成为理想的进程杀手。 当 Visual Studio 和正在调试的应用程序都挂起、附加并终止 VS 的旧实例时。杀手可以是 VS 的新实例,然后它可以打开旧项目并允许您继续工作。 除了winsdk_web.exe
之外,我不知道如何从该链接下载任何内容。
您现在可以通过运行安装程序然后取消选中除“Windows 调试工具”(docs.microsoft.com/en-us/windows-hardware/drivers/debugger/…) 之外的所有内容在 Windows 10 SDK 中获取它【参考方案7】:
设置 AT 命令以 SYSTEM 身份运行任务管理器或进程资源管理器。
AT 12:34 /interactive "C:/procexp.exe"
如果进程资源管理器在您的根 C 驱动器中,那么这会将其以 SYSTEM 身份打开,您可以终止任何进程而不会出现任何拒绝访问错误。将其设置为未来一分钟,然后它会为您弹出。
【讨论】:
我在尝试此操作时收到以下警告,因此它似乎不再起作用:“警告:由于安全性增强,此任务将在预期的时间运行,但不会以交互方式运行。使用 schtasks.exe 实用程序如果需要交互式任务('schtasks /?' 了解详细信息)。”【参考方案8】:我也遇到了这个问题,我是这样解决的。
1/ 打开 « 任务管理器 «
2/ 在列表中找到应用名称
3/ 找到后,右键单击其名称,然后单击“属性”
4/ 在属性界面,点击 « security «
5/ 点击 « edit » 更改权限
6/“拒绝”所有用户的所有权限,点击“应用”,然后点击“确定”
7/ 点击«高级»进行特殊权限设置
8/ 删除所有用户的权限
9/ 点击“应用”,然后点击“确定”
10/ 点击 « apply » 然后再次点击 « ok »
11/您现在可以在任务管理器上杀死进程以及卸载您想要的应用程序。
【讨论】:
【参考方案9】:当 ntsd 访问被拒绝时,尝试:
ZeroWave 被设计成一个简单的工具,可以为任何类型的进程提供多级终止。
ZeroWave 也是一个易于使用的程序,因为它安装简单,图形界面非常友好。
ZeroWave 具有三种终止模式,通过“INSANE”模式可以终止任何可以在 Windows 上运行的进程。
ZeroWave好像杀不了avp.exe
【讨论】:
【参考方案10】:仅供参考,您有时可以使用 SYSTEM 或 Trustedinstaller 来终止任务;)
谷歌 quickkill_3_0.bat
sc config TrustedInstaller binPath= "cmd /c TASKKILL /F /IM notepad.exe
sc start "TrustedInstaller"
【讨论】:
以上是关于真正杀死Windows中的进程的主要内容,如果未能解决你的问题,请参考以下文章