在 Windows (C/C++) 中杀死“关键进程”

Posted

技术标签:

【中文标题】在 Windows (C/C++) 中杀死“关键进程”【英文标题】:Killing a "Critical Process" In Windows (C/C++) 【发布时间】:2009-03-18 04:15:50 【问题描述】:

杀死关键进程的最佳方法是什么?

【问题讨论】:

什么是“关键过程”?示例...? 【参考方案1】:

它很重要是有原因的,所以你可能根本不应该杀死它。最好的方法是关闭盒子,以免您将其置于危险状态。

如果您选择忽略我的警告,here 是一些示例 C++ 代码。

【讨论】:

好的。好吧,谢谢你的生活课。但是,如果我需要杀死一个系统进程,我该怎么做。 对不起,ixo,我没有居高临下的意思,为你添加了链接。 哦不,你听起来并不居高临下。您只是很合乎逻辑并使用推理:)谢谢您的链接,先生。 杀死一个关键的系统进程意味着这台机器几乎被水淹没并且不能做任何事情(即不能验证用户,不能创建远程线程等)。不要这样做。【参考方案2】:

This knowledge base article 描述了如何做到这一点。您首先调用SeDebugPrivilege() 来获得终止进程的权限,然后调用带有PROCESS_TERMINATE 标志的OpenProcess() 来获取要终止的进程的句柄,最后调用TerminateProcess() 来终止进程.

【讨论】:

【参考方案3】:

是的,按照亚当的建议去做。然后看着你的机器蓝屏,因为你刚刚终止了一个关键进程:)(顺便说一句,要清楚:亚当的建议是 100% 准确的,我根本不想批评它)。

为什么要这样做?它们被称为关键流程是有原因的。

【讨论】:

我记得有一天我有一个服务控制面板卡住了,所以我决定从任务管理器中删除它 - 嗯,我问自己的名字是什么 - 显然它必须是 services.exe 跨度> 如果您想知道,不,它不是并且机器蓝屏【参考方案4】:

在 signal.h 中调用 kill 函数是在 C 中杀死进程的一种方法。不知道 C++ 中的交替。

Killing a Process in C

编辑:看看这段代码。

WIN 32 API example

【讨论】:

谢谢,我喜欢这个链接顺便说一句! (已添加书签)通过 Windows API 的最佳方式是什么? 这看起来像 POSIX,而不是 Windows。【参考方案5】:

我想,问题是如何在没有 BSoD 的情况下杀死关键进程。为此,您需要首先删除临界位,并且仅在调用终止函数之后。

【讨论】:

您好,欢迎来到 SO!请阅读tour和How do I write a good answer?

以上是关于在 Windows (C/C++) 中杀死“关键进程”的主要内容,如果未能解决你的问题,请参考以下文章

在 Windows 中,以这样的方式杀死批处理文件,使其子文件也被杀死

在Windows的参数中按ID杀死进程

在windows中使用管道和taskkill用pid杀死进程

当父进程被杀死时,使用 fork() 创建的子进程是不是会自动被杀死?

使用命令提示符杀死 Windows 中的应用程序(任务)

如何在父进程被杀死/完成时保持子进程处于活动状态(在 Windows 中)