我意外地创建了一个继续调用CreateProcess的程序 - 导致无限循环。
一旦它开始运行,我将如何杀死这个程序?我曾试图通过任务管理器将其删除,但由于该程序会自行启动并立即死亡,它会继续消失并重新出现在任务管理器中,使其“不可阻挡”。
阻止这种情况的唯一方法似乎是重启PC,这可能非常不方便。
int WINAPI wWinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, PWSTR pCmdLine, int nCmdShow )
{
using namespace std;
CreateProcess( L"self.exe",
NULL, // No command line arguments
NULL, // Process handle not inheritable
NULL, // Thread handle not inheritable
NULL, // Set handle inheritance to NULL
NULL, // No creation flags
NULL, // Use parent's environment block
NULL, // Use parent's starting directory
&lpStartupInfo, // Pointer to STARTUPINFO structure
&lpProcessInfo // Pointer to PROCESS_INFORMATION structure
);
return 0;
//return (int)msg.wParam;
}
答案 0 :(得分:1)
从最终用户的角度来看,简单的解决方案是按 Ctrl + Alt + Del 并注销。如果你想让会话保持活跃,像这样的分支炸弹的唯一解决方案是使用一个理解进程树的工具。 {/ 1}},如评论或Process Explorer中的“Kill process tree”功能所示。子进程可能仍然可以偷偷过去,因此您可能需要多次执行kill命令。
如果我为此编写了一个kill工具,我会枚举这些进程,当找到目标进程时,你打开一个句柄并尝试将它与job object相关联。作业对象允许您拒绝创建子进程,并允许轻松终止作业中的所有进程。如果无法将流程添加到作业中,请致电(Filter.Direccion_Nro == null || i.Direccion_Nro == Filter.Direccion_Nro.Value)
。
您需要在循环中运行此枚举代码,直到您杀死所有所需的进程。