发布于 2019-11-14 13:34:56
建议重置信号处理程序强制重新抛出信号。 表示一旦信号处理程序返回,信号将被重新抛出。
两者都不是真的。然而,我不认为这些评论意味着什么。可能的情况是,在某些情况下,它会留下未处理的信号。因此,触发信号的最初问题再次触发相同的信号。考虑一下这个例子:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <signal.h>
void handler(int sig)
{
write(1, "Received FPE\n", sizeof "Received FPE\n" - 1);
}
int main(void)
{
signal(SIGFPE, handler);
printf("%f", 1/0);
}(这应该会导致无限循环)。
在这里,SIGFPE并没有得到真正的“处理”。因此,一旦控件从信号处理程序返回,SIGPFE就会被反复触发。我相信这就是那些评论中提到的情景。
类似地,当信号被阻塞时,一旦解除阻塞,它们将被排队并发送到进程。当安装它们的信号处理程序的时候,他们正在掩盖它。这很可能是第二个评论所指的。掩蔽也可以通过sigprocmask或pthread_sigmask完成。
https://stackoverflow.com/questions/58852429
复制相似问题