SIGSEGV处理程序无法退出

wan*_*o15 3 c unix linux signals segmentation-fault

我注册了一个处理程序SIGSEGV,fprintf用来打印一些消息然后退出.该过程打印消息但未退出.之前它被阻止了exit().

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

void sigsegv__handler(){
    fprintf(stderr, "SIGSEGV , TID: %d,PID: %d\n", TEST_ID, getpid());
    exit(1);
}
Run Code Online (Sandbox Code Playgroud)

alk*_*alk 5

我不能exit()用来正常完成处理程序中的进程吗?

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

也就是说, printf()不应该从信号处理程序调用适用于同样理由的原因exit().

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


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