Windows:杀死创建自己的程序

时间:2017-12-11 13:24:05

标签: c++ windows winapi

我意外地创建了一个继续调用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;
}

1 个答案:

答案 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)

您需要在循环中运行此枚举代码,直到您杀死所有所需的进程。