在C / C ++窗口中终止进程

时间:2011-11-03 11:50:59

标签: c++ c windows process termination

我正在尝试捕获进程结束的时间(例如,通过在taskmanager中杀死它)。在检测到(在结束的过程内)时,在退出之前做一些工作。 我的应用并没有以无限循环结束

我试过:1)atexit 2)SetUnhandledExceptionFilter

我尝试在调试运行中简单地关闭运行的应用程序,但它最终没有达到执行额外任务的程度。

帮助,

3 个答案:

答案 0 :(得分:4)

这应该回答你的问题:

  

有两种方法可以在任务管理器中终止应用程序。

     

Killing through Applications选项卡大致相当于SIGTERM(在Linux中)。应用程序可以拦截它并进行更多处理,因为它基本上是发送“关闭窗口”消息。要捕获的消息是WM_CLOSE。

     

Killing through Processes选项卡大致相当于SIGKILL(在Linux中)。如果没有监视用户在任务管理器的列表框和结束进程按钮中的操作,或者有一个监视程序进程可以看到第一个被杀死的时间,那么你无法阻截它

答案 1 :(得分:1)

枚举所有正在运行的进程。完成后,您将获得进程ID。通过先前获得的ID获取每个流程的句柄,并找到您要查找的流程。 在单独的线程中使用相同的进程句柄,如下所示:

WaitForSingleObject(hProcess,INFINITE);

一旦进程终止,该线程将结束。

答案 2 :(得分:1)

在控制台应用程序中,您应该考虑安装HandlerRoutine callback函数来捕获CTRL_C_EVENT,CTRL_BREAK_EVENT,CTRL_CLOSE_EVENT,CTRL_LOGOFF_EVENT,CTRL_SHUTDOWN_EVENT。

在GUI应用中,您应该考虑处理WM_CLOSEWM_QUERYENDSESSIONWM_ENDSESSION