加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

linux – 分段错误处理程序中的分段错误

发布时间:2020-12-13 22:53:24 所属栏目:Linux 来源:网络整理
导读:在 Linux下的分段falut处理程序中是否存在一些针对分段错误的定义行为? 是否会再次调用同一个处理程序?如果是这样,在所有平台上,是否定义等等. 谢谢. 解决方法 答案取决于您安装信号处理程序的方式.如果使用不推荐的 signal() 调用安装了信号处理程序,那么
在 Linux下的分段falut处理程序中是否存在一些针对分段错误的定义行为?
是否会再次调用同一个处理程序?如果是这样,在所有平台上,是否定义等等.
谢谢.

解决方法

答案取决于您安装信号处理程序的方式.如果使用不推荐的 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;
}

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读