【发布时间】:2015-08-09 19:19:54
【问题描述】:
当程序阻止硬件生成的信号(例如SIGSEGV)然后获取此信号时,我无法理解程序的行为。例如,如果SIGSEGV 的信号处理程序是随 sigaction 一起安装的(信号在处理程序内被阻塞),但程序在处理程序内得到另一个 SIGSEGV。我找不到在这种情况下程序应该如何表现的描述。据我了解,在 Linux 上,信号将解除阻塞,程序将崩溃。但是其他 Unix 系统呢,是不是在某个地方指定了呢?
谢谢。
【问题讨论】:
-
当引发
SIGSEGV并且处理程序返回时,将重新启动相同的指令(在这种情况下,与导致SIGSEGV的指令相同)并且您的处理程序将再次被调用——导致无限环形。如果您的程序收到SIGSEGV,则很有可能存在 UB。所以你应该解决这个问题,而不是尝试处理SIGSEGV。