我有一个Windows C ++应用程序(app.exe)。 当应用程序closures时,我需要执行一些特定于我的应用程序的清理任务。 当此进程(app.exe)通过任务pipe理器终止时会发生什么情况。 假设应用程序仍然响应,我可以以某种方式处理我的app.exe中的这种情况?
我正在寻找类似于Linux中kill <pid>
,将SIGTERM信号发送到由pid指示的进程。 然后,我可以注册我自己的信号处理程序SIGTERM并执行清理。
有两种方法在任务管理器中终止应用程序。
SIGTERM
。 应用程序可以拦截它并做更多的处理,因为它基本上是发送一个“关闭窗口”消息。 要捕获的消息是WM_CLOSE
。 SIGKILL
。 在任务管理器的列表框和“结束进程”按钮中没有监视用户的操作,或者有一个看门狗进程会看到第一个被杀死的时间,所以没有什么可以做的。 或者,以不需要清理的方式设计应用程序,或以启动时执行清理的方式来设计应用程序。
我想你将需要另一个PID来监视你的app.exe的PID,并在当时做必要的工作。
这取决于,如果用户选择“结束任务”你的应用程序,你会得到通知,你可以处理它看到这一点。
但是如果用户选择结束进程,则无法在应用程序中处理它。 最简单的方法是第二个进程,或者你可以注入进程管理器并挂接TerminateProcess API。