SIGSEGV发送两次 - 处理后崩溃程序

问题描述:

我有一个测试程序,用于处理信号的C库的一部分。在这个测试程序中有很多代码 - 非常多,我觉得在这里发布它只会让我更难回答我的问题。SIGSEGV发送两次 - 处理后崩溃程序

基本上发生的事情是,我迫使系统在后台线程中向我发送一个SIGSEGV。我处理这个信号,然后测试结束。主线程将等待这个信号处理程序的一部分是重新启动主线程。当主线程重新启动我恢复默认信号处理程序signal(SIGSEGV, SIG_DFL)然后我得到另一个 SIGSEGV

我知道我有很多代码,这很可能是我的错,但是为什么SIGSEGV会触发两次?当我引起其他信号时,它不会发生(尽管我没有尝试过所有这些信号)。

为了说明我在OS X上编写C语言,使用gcc编译。

如果您在信号处理程序中有任何问题,例如内存覆盖,尝试访问超出分配区域,则会引发新的信号。详细信息请查看以下页面。

http://www.gnu.org/software/libc/manual/html_node/Signals-in-Handler.html

您还应该使用重入函数的内部信号处理,例如则localtime_r,而不是本地时间。

此外,建议使用sigaction()而不是signal()。

更多细节在这里:What is the difference between sigaction and signal?