我一直在研究Linux中的异常处理。我知道(在某种程度上)Linux 使用信号机制来通知 SIGSEGV、SIGFPE、SIGINT 等进程。要捕获这些信号,需要使用 sigaction 显式注册它们。
我的问题:
我打算将 GTK 用于应用程序的 UI(包括消息屏幕)。我正在寻找一种 Linux 推荐的方法来处理异常并优雅退出,以提供良好的用户体验。
我想捕获所有信号
不,你不知道。或者至少你不应该这样做。
信号是:
向用户显示消息,应用程序不会退出
有一定可能。但是,如果您有一个刚刚损坏了内存的多线程程序,那么显示该消息的最佳位置可能来自不同的进程。 @Eljay 在评论中建议的某种外部监控流程。
我打算杀死工作线程(因此避免循环)并通知主线程向用户显示消息并优雅地展开
如果您有一个多线程程序,其中工作线程持有一些锁,并且您终止了它,则您将无法取回这些锁。尝试在同一进程中(甚至在不同的线程中)执行任何重要操作可能会导致死锁/进一步崩溃。
在该处理程序中您最多可以做的就是以尽可能简单的方式记录您可以获取的信息(信号安全提醒),然后戳您的监控进程,时间到了。
如果您正在处理文档,是否应该尝试保存一些数据(如果可以)?假设事物已损坏/损坏。所以通常不会。