栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

关于标准信号的传送

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

关于标准信号的传送

如果未阻止特定信号怎么办,同一信号的多个实例将排队吗?

这取决于是否已使用

sigaction
结构和
sigaction()
功能为信号设置了SA_SIGINFO标志,以及您的系统是否对_POSIX_REALTIME_SIGNALS有一个有效的定义(现代Linux内核具有)。如果两个实例都为真,则符合这两个条件的任何到达信号都将在每个进程队列中排队,直到它们被传递或接受,直到操作系统对给定信号队列中的项目数施加限制。在那一点之后,丢弃到达该信号类型的任何其他信号。

如果这些情况中的任何一种都不成立,则仅处理当前到达的信号,并且丢弃在当前信号处理程序运行时到达的 具有相同信号类型的
任何其他信号。同样,如果您正在阻止信号,并且两个或多个信号到达该过程并且没有传递,则它们会合并在一起成为一个信号事件。但是同样,这仅在不满足以上两个条件的情况下……否则,将相同类型的多个信号事件排队。

还要注意一点……陈述的两个条件是针对POSIX规范的,但是Linux将对任何实时信号进行排队,即使未为该信号设置SA_SIGINFO。因此,这意味着对应于范围SIGRTMIN和SIGRTMAX的任何信号。

信号在哪里排队,是过程的特定位置还是全局位置?

它存储在每个进程的队列中。

如何处理排队的信号,是否有可能同时处理两个信号,或者保证信号将被一个接一个地处理?

这取决于您如何使用

sigaction
结构和
sigaction()
功能设置信号处理程序。不能保证在信号处理程序运行时会阻止其他任何信号。可以在
sigaction
结构内设置一个信号掩码,以确定在信号处理程序运行时哪些信号被阻塞。信号本身会被阻塞,直到信号处理程序完成为止,但是如果您的结构中设置的信号处理程序未设置信号屏蔽,则其他信号会中断您当前的信号处理程序
sigaction
。因此,您在信号处理程序中所做的任何事情都应该是异步安全的,并且您不应像在信号处理程序中那样调用任何非异步安全的函数
fprintf()
因此,可以保证信号本身按FIFO顺序处理(即,一个信号不会中断自身),但是如果您没有故意阻止它们,则其他信号也会中断您当前的信号处理程序。请记住,在信号处理程序中设置信号掩码以阻止其他信号中断您的处理程序是一个
非常糟糕的
主意,并且不是原子操作,因此请勿这样做。如果要在信号处理程序运行时阻止其他信号,请在
sigaction
传递给的结构中提供信号掩码
sigaction()




转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/391833.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号