我正在尝试捕获进程结束的时间(例如,通过在taskmanager中杀死它)。在检测到(在结束的过程内)时,在退出之前做一些工作。 我的应用并没有以无限循环结束
我试过:1)atexit 2)SetUnhandledExceptionFilter
我尝试在调试运行中简单地关闭运行的应用程序,但它最终没有达到执行额外任务的程度。
帮助,
答案 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_CLOSE,WM_QUERYENDSESSION,WM_ENDSESSION。