2011-11-03 124 views
2

我想赶上进程结束的时间(例如通过在taskmanager中杀死它)。当它检测到(在结束的过程中)时,在退出前做一些工作。 矿山的应用并没有结束byitslef(无限循环)在C/C++窗口终止进程

我想:1)的atexit 2)SetUnhandledExceptionFilter

我试着在调试运行,以简单的关闭运行的应用程序,但它并没有得到最后执行额外任务的重点。

帮助,

回答

4

这应该回答你的问题:

有两种方式来杀死在任务管理器应用程序。

通过应用程序杀死选项卡大致相当于SIGTERM(在Linux中)。应用程序可能会拦截它并执行更多处理,因为它基本上是发送“关闭窗口”消息。要捕获的消息是WM_CLOSE。

通过进程杀死选项卡大致等同于SIGKILL(在Linux中)。没有什么可以做,以拦截,短期的监控用户在任务管理器的列表框和结束进程按钮动作,或者具有监视进程时,第一个被杀害

+0

很好......你从哪里引用? –

+0

@JonasHeidelberg在SO上的一个类似帖子。然而,问题是不同的。 – 6D65

1

枚举所有正在运行的进程,将看到。一旦你这样做,你会得到进程ID。通过先前获得的ID获取每个流程的句柄,并找到您要查找的流程。 像这样在单独的线程中使用相同的进程句柄:

WaitForSingleObject(hProcess,INFINITE);

一旦进程终止,该线程将结束。

+0

在同一个过程中,而不是其他过程 –

+0

对不起,我错过了你原来的帖子。我想你必须为此目的创建一个单独的进程(看门狗)。当你终止进程时,操作系统将释放该进程使用的所有资源。您不能在终止进程中处理进程终止。 – 2011-11-03 13:24:34

+0

是的,我查了很多,觉得在同一个过程中是不可能的。谢谢 –

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

+0

我需要Windows应用程序 –

+0

@RomanDorevich:然后处理WM_ *。 –