“Unix环境中的高级编程”一书说:
内核不会对信号排队,除非它们支持POSIX.1的实时扩展
如果一个阻塞信号产生了不止一次(产生的阻塞信号是不同类型的),它被设置在信号掩码上。然后,与处理的当前状态相关的信号在其他信号之前被传送。
这里,信号队列和信号掩码有区别吗?
如果为每种不同类型设置了信号掩码,则意味着内核知道等待什么信号(因此,我认为queue和mask是相同的)
那么,一次传送信号是什么情况呢?当同一类型的信号被传送不止一次时,是不是像这样?
而且,大多数UNIX系统,不排队的信号意味着只有一个信号屏蔽位可以设置在清除屏蔽?然后,如果不同类型的许多信号在该进程中被阻塞,会发生什么?什么信号没有设定?

最佳答案

Signal Mask:
当前被阻止的信号集合称为信号掩码。进程可以设置一个信号掩码,告诉内核它不想接收某些特定的信号。因此,发送这些被阻塞的信号之一意味着不会调用相应的信号处理程序。SIGKILLSIGSTOP信号不能被阻止。
Signal Queue:每个进程维护一个已接收但尚未处理的信号队列。使用掩码阻止的信号将排队。进程可以通过sigwait()sigwaitinfo()和类似的函数访问此队列。

10-08 08:20
查看更多