信号队列和信号掩码

时间:2016-03-07 15:37:51

标签: c linux signals

“Unix环境下的高级编程”一书中说:

内核不会对信号进行排队,除非它们支持POSIX.1的实时扩展

如果多次生成阻塞信号(生成的阻塞信号类型不同),则在信号掩码上设置。然后,在其他信号之前传递与过程的当前状态相关的信号。

这里,信号队列和信号掩码之间有什么不同? 如果为每个不同类型设置信号掩码,则意味着内核知道正在等待的信号。(因此,我认为队列和掩码是相同的。)

而且,一次传递信号的情况如何?当同一类型的信号被多次传递时,它是这样的吗?

另外,大多数UNIX系统,不排队信号意味着在清除掩码上只能设置1个信号掩码位?那么,如果在该过程中阻止了不同类型的许多信号,会发生什么?没有设置什么信号?

1 个答案:

答案 0 :(得分:1)

Signal Mask: 当前阻塞的信号集合称为信号掩码。进程可以设置信号掩码以告诉内核它不想接收某些特定信号。因此,发送这些阻塞信号之一意味着不会调用相应的信号处理程序。 <{1}}和SIGKILL信号无法阻止。

Signal Queue:每个进程都维护一个已收到但尚未处理的信号队列。使用掩码阻止的信号将排队等候。该流程可以通过SIGSTOPsigwait()和类似功能访问此队列。