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); } 解决方法
不应该从信号处理程序调用exit(),因为它不能保证是异步信号安全的.请改用_exit(),_ Exit()或abort(). 也就是说,不应该从信号处理程序调用printf(),原因与exit()相同. 有关异步信号安全功能的完整列表,请查看此页面: > Linux:http://man7.org/linux/man-pages/man7/signal.7.html 此外,当分段违规发生时,程序不稳定,甚至破坏,堆栈可能会被粉碎,因此无法保证从那一刻开始可以调用任何东西. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |