我重载在此网站 HTTP所列的6个信号:// WWW。 cplusplus.com/reference/clibrary/csignal/signal.html

然后我跑我的应用程序(双击通过IDE不运行),并试图1)结束任务2)X上topright和3)杀过程。我预计前两个引起某种信号(我是XP系统),但可惜我没有什么。不允许我打开文件写入时出现的信号进入?我猜测我是(SIGSEGV让我)。

当Firefox崩溃或当我杀死它,它会记住我是什么页面。它记录的地址每次我点击一个页面或会这样的信号/崩溃?

我的主要问题是可以使用哪些信号赶上杀灭过程

有帮助吗?

解决方案

Win32的不提供一个选项,以拦截程序与TerminateProcess被杀害(这是当你从任务管理器“结束任务”或者点击[X]会发生什么)。

您可以赶上SIGSEGV信号,因为C运行时库在Windows上运行时提供了这种信号的仿真。当你的程序会导致Windows访问冲突(例外0000005),运行时库已赶上并模拟一个Unix风格SIGSEGV适合您的选项。这一点,但是,不处理这些异常的最佳方式。如果你正在编写一个Win32程序,你一般不应尝试使用Unix样式的服务。

其他提示

您可以赶上像一个访问冲突运行时错误,如果你覆盖默认的异常处理程序调用SetUnhandledExceptionFilter(这是一个Win32函数,因此不依赖于C库仿真)。这是该方法可用于提供“小型转储”当一个程序崩溃。

但这个异常处理程序不会被调用时,你通常关闭应用程序,或者当你的应用程序从任务管理器关闭。在最后一种情况的窗口正在调用了TerminateProcess,是不是干净关闭,但它迫使你的程序终止。

我不知道这是Firefox浏览器使用的实现,但保存当前选项卡中打开可能有一个计时器运行,并且每次运行它时保存历史文件和某种肮脏标记

其它更复杂的解决方案,以检测当一个程序被关闭(由防病毒和类似的程序来实现)是具有两个不相关的程序运行中,每个检查所述其它仍在运行,并且如果一个检测其它被关闭运行它试。

的Windows应用程序要么控制台应用或GUI应用。控制台应用程序往往会得到WM_CLOSE,控制台应用程序CTRL_CLOSE_EVENT。既不是信号;既不将被发送通过了TerminateProcess如果你的应用程序结束()。

如果你想存储你在哪里,使用内存映射文件和更新上的每一个动作。当你的进程退出,在内存中的脏页写回由操作系统文件,可能在其他时刻了。该解决方案允许操作系统来管理磁盘I / O的你,这是更好地这样做。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top