我可以通过任务管理器处理我的Windows进程吗?
问题描述:
我有一个Windows C++应用程序(app.exe)。当应用程序关闭时,我需要执行特定于我的应用程序的一些清理任务。当此进程(app.exe)通过任务管理器终止时会发生什么情况。假设应用程序仍然响应,我可以以某种方式处理我的app.exe中的这种情况吗?我可以通过任务管理器处理我的Windows进程吗?
我正在寻找类似于Linux中的kill <pid>
将SIGTERM信号发送到由pid指示的进程的内容。然后,我可以为SIGTERM注册我自己的信号处理程序并执行清理。
答
有两种方法可以在任务管理器中关闭应用程序。
- 通过应用杀死标签将大致等同的
SIGTERM
。应用程序可能会拦截它并执行更多处理,因为它基本上是发送“关闭窗口”消息。留言是WM_CLOSE
。 - 通过杀死进程选项卡大致相当于
SIGKILL
。在任务管理器的列表框和“结束进程”按钮中监视用户的操作,或者让监视程序进程可以看到第一个被杀死的时间,您就无法做出任何拦截。
或者,以不需要清理的方式设计应用程序,或以启动时执行清理的方式设计应用程序。
答
我想你将需要另一个PID来监视你的app.exe的PID,并在当时做必要的工作。
答
这就要看,如果用户选择“结束任务”应用程序会通知您,您可以处理它see this.
但如果用户选择终止过程中,你有没有办法来处理它你的申请。最简单的方法将是第二个进程,或者您可以注入进程管理器并挂接TerminateProcess API。
不幸的是,无法重新设计应用程序。它是一个拥有数千行代码的10年历史应用程序。 – Umair 2009-10-06 19:36:24