Linux 下分段故障处理程序中发生的分段故障是否有一些定义的行为?
是否会再次调用同一个处理程序?如果是,在所有平台上是否已定义等等。
谢谢。
答案取决于您如何安装信号处理程序。如果您使用已弃用的安装信号处理程序signal() http://linux.die.net/man/2/signal调用,那么它会将信号处理程序重置为默认处理程序,或者在调用信号处理程序之前阻止正在处理的信号。如果它阻塞了信号,它将在信号处理程序返回后解除阻塞。
如果你使用sigaction() http://linux.die.net/man/2/sigaction,您可以控制在调用信号处理程序时阻止哪些信号。如果这样指定,有可能导致无限递归。
可以实现一个安全的包装器sigaction()
其 API 类似于signal()
:
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;
}
这会在信号处理程序调用期间阻塞所有信号,信号处理程序返回后会恢复。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)