首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >什么时候信号会自动被重新抛出?

什么时候信号会自动被重新抛出?
EN

Stack Overflow用户
提问于 2019-11-14 08:32:51
回答 1查看 94关注 0票数 0

断点板中的以下评论表示,重新设置信号处理程序会强制重新抛出信号。然而,我无法在网上找到任何描述这种行为的文档。

此外,这里的评论说,一旦信号处理程序返回,信号将被重新抛出。这是否也是信号处理程序被还原或重置为默认值的结果?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-11-14 13:34:56

建议重置信号处理程序强制重新抛出信号。 表示一旦信号处理程序返回,信号将被重新抛出。

两者都不是真的。然而,我不认为这些评论意味着什么。可能的情况是,在某些情况下,它会留下未处理的信号。因此,触发信号的最初问题再次触发相同的信号。考虑一下这个例子:

代码语言:javascript
复制
#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就会被反复触发。我相信这就是那些评论中提到的情景。

类似地,当信号被阻塞时,一旦解除阻塞,它们将被排队并发送到进程。当安装它们的信号处理程序的时候,他们正在掩盖它。这很可能是第二个评论所指的。掩蔽也可以通过sigprocmaskpthread_sigmask完成。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58852429

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档