linux - 段错误处理程序中的段错误

标签 linux segmentation-fault

对于在 Linux 下的段错误处理程序中发生的段错误,是否有一些已定义的行为? 是否会再次调用同一个处理程序?如果是这样,在所有平台上,它是否被定义等等。 谢谢。

最佳答案

答案取决于您如何安装信号处理程序。如果您使用已弃用的 signal() 安装信号处理程序调用,然后它将信号处理程序重置为默认处理程序或在调用信号处理程序之前阻止正在处理的信号。如果它阻塞了信号,它将在您的信号处理程序返回后解除阻塞。

如果您使用 sigaction() ,您可以控制在调用信号处理程序时阻止哪些信号。如果这样指定,有可能造成无限递归。

可以围绕 sigaction() 实现一个安全包装器,它具有类似于 signal() 的 API:

sighandler_t safe_signal (int sig, sighandler_t h) {
    struct sigaction sa;
    struct sigaction osa;
    sa.sa_handler = h;
    sigemptyset(&sa.sa_mask);
    sa.sa_flags = 0;
    if (sigaction(sig, &sa, &osa) < 0) {
        return SIG_ERR;
    }
    return osa.sa_handler;
}

这会在信号处理程序调用期间阻塞所有信号,并在信号处理程序返回后恢复。

关于linux - 段错误处理程序中的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11936020/

相关文章:

linux - Sed 错误 : bad option in substitution expression

linux - 如何获取已安装应用程序的完整 pkg 列表(debian)?

c - memcpy unsigned int 到 unsigned char 段错误

java - 在 linux 中执行 java 程序时 Xterm 显示不正确

ruby-on-rails - 存储文件的校验和或类似内容,以便轻松判断它是否与另一个文件相同

c - 段错误 : don't know where to start

c++ - 带有 XULRunner 15 的 Linux 上的 XRE_InitEmbedding2 SIGSEGV

c - C中的许多TQLI实现是否有错误?

c++ - 分段故障多项式

linux - 在 Ubuntu 16.04 中,如果没有 sudo 用户,则无法运行 Docker 命令