首页 文章

在阻塞时获取SIGSEGV信号[重复]

提问于
浏览
0

这个问题在这里已有答案:

当程序阻止硬件生成的信号(例如 SIGSEGV )然后获取此信号时,我无法理解程序的行为 . 例如,如果 SIGSEGV 的信号处理程序与sigaction一起安装(信号在处理程序内被阻止),但程序在处理程序中获得另一个 SIGSEGV . 在这种情况下,我找不到程序应该如何表现的描述 . 据我所知,在Linux上,信号将解除阻塞,程序将崩溃 . 但是其他Unix系统呢,它是在某处指定的吗?

谢谢 .

1 回答

  • 2

    大多数(如果不是全部) SIGSEGV 的同步生成是 undefined behavior 的结果,因此询问发生的情况没有意义;结果显式未定义 . 阻止 SIGSEGV 仅在通过 killsigqueuepthread_kill 等发送信号时才有意义 .

    我在实践中的经验是,导致 SIGSEGV 的UB导致程序终止,就好像是未被捕获的 SIGSEGV ,如果 SIGSEGV 被阻止 . 但是因为它可能根本没有发生陷阱,或者编译器以意想不到的方式完全重新排序代码或者优化整个程序 . 不要依赖任何这一点 .

相关问题