我能通过任务管理器终止Windows进程吗?

7
我有一个Windows C++应用程序(app.exe)。当应用程序关闭时,我需要执行一些特定于我的应用程序的清理任务。当通过任务管理器杀死此进程(app.exe)时会发生什么?假设应用程序仍然响应,我是否可以在我的app.exe中处理这种情况?
我希望能找到类似于Linux中“kill ”将发送SIGTERM信号给pid所指示的进程的方式。然后,我可以为SIGTERM注册自己的信号处理程序并执行清理操作。
3个回答

12

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

  • 通过应用程序选项卡终止相当于发送SIGTERM信号。应用程序可能会拦截它并进行更多的处理,因为实际上相当于发送“关闭窗口”消息。要捕获的消息是WM_CLOSE
  • 通过进程选项卡终止相当于发送SIGKILL信号。除了监视用户在任务管理器的列表框和“结束进程”按钮上的操作或拥有一个看门狗进程来检测第一个进程何时被杀死之外,您无法阻拦这个信号。

或者,以不需要清理的方式设计应用程序,或者在启动时执行清理操作。


很遗憾,无法重新设计该应用程序。这是一个有数千行代码的10年老遗留应用程序。 - Umair
1
注意,谷歌员工们:在控制台应用程序中没有 WM_CLOSE。 在那里,您需要调用 SetConsoleCtrlHandler 来注册处理程序以处理关闭(即“SIGTERM”)的 CTRL_CLOSE_EVENT - Sz.

1
我认为你需要另一个PID来监控你的app.exe的PID,并在适当的时候进行必要的工作。

基本上是一个看门狗应用程序,将处理这样的情况。 - munsingh

0

这取决于用户的选择,如果用户选择“结束任务”您的应用程序,您将收到通知并可以处理它请参见此处。

但是,如果用户选择结束进程,则无法在您的应用程序中处理它。最简单的方法是使用第二个进程,或者您可以注入到进程管理器并挂钩TerminateProcess API。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接