我可以通过任务pipe理器来处理我的Windows进程吗?

我有一个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。