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

SIGSEGV处理程序无法退出

发布时间:2020-12-16 10:03:14 所属栏目:百科 来源:网络整理
导读:我注册了SIGSEGV的处理程序,使用fprintf打印一些消息然后退出.该过程打印消息但未退出.它在exit()之前被阻止. 我不能使用exit()在处理程序中正常完成该过程吗? void sigsegv__handler(){ fprintf(stderr,"SIGSEGV,TID: %d,PID: %dn",TEST_ID,getpid()); ex
我注册了SIGSEGV的处理程序,使用fprintf打印一些消息然后退出.该过程打印消息但未退出.它在exit()之前被阻止.

我不能使用exit()在处理程序中正常完成该过程吗?

void sigsegv__handler(){
    fprintf(stderr,"SIGSEGV,TID: %d,PID: %dn",TEST_ID,getpid());
    exit(1);
}

解决方法

Can’t I use exit() to normal finish the process in the handler?

不应该从信号处理程序调用exit(),因为它不能保证是异步信号安全的.请改用_exit(),_ Exit()或abort().

也就是说,不应该从信号处理程序调用printf(),原因与exit()相同.

有关异步信号安全功能的完整列表,请查看此页面:

> Linux:http://man7.org/linux/man-pages/man7/signal.7.html
> POSIX:http://pubs.opengroup.org/onlinepubs/9699919799/functions/V2_chap02.html#tag_15_04_03

此外,当分段违规发生时,程序不稳定,甚至破坏,堆栈可能会被粉碎,因此无法保证从那一刻开始可以调用任何东西.

(编辑:李大同)

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

    推荐文章
      热点阅读