【发布时间】:2010-06-10 06:48:04
【问题描述】:
我需要在我的 Linux 应用程序中处理 SIGSEGV。原因是在生成核心转储之前必须进行一些清理(3 方库)。更重要的是,清理必须在调用线程的上下文中执行,不能在信号处理程序中执行。 所以我计划在信号处理程序中将控制权传递给调用线程,在清理完成后,然后使用 raise(SIGSEGV) 生成核心转储。
真正的问题似乎是 signal_handler 无法将控制权传递给调用线程,无论我使用 post_sem 还是其他一些。 有处理这个案子的想法吗?是否可以劫持 SIGSEGV,然后在 SIGSEGV 处理程序中返回另一个线程进行一些清理?
信号(SIGSEGV,信号处理程序);
signal_handler() { ... post_sem(); ... }
调用线程() { wait_sem(); 清理(); ... }
【问题讨论】:
-
您描述的方法实际上是最接近有效的方法。标准要求
sem_post(POSIX 版本)是异步信号安全的。
标签: linux handler signals segmentation-fault