SIGALRM 被掩码屏蔽
SIGALRM blocked by a mask
我对 SIGALRM 信号被阻塞时会发生什么有疑问,它是进入挂起状态并在解除阻塞后传送还是丢失?
SIGALRM 处于待处理状态,将在解封后立即发送。
一个被阻止的信号 (SIG_BLOCK) 保持挂起状态,直到:
- 已交付,通过解除阻塞并具有默认(SIG_DFL 或 "uncaught")配置或用户提供的("caught" ) 处置,如
struct sigaction
的 sa_handler
.
- 已被
sigwait
, sigwaitinfo
, or sigtimedwait
接受,这意味着它已从未决信号集中删除,无需进一步操作
- 丢弃,方法是将其配置更改为 SIG_IGN ("ignored")。已经忽略的信号 will not be held pending in any case
传统的 UNIX 信号通常不排队,因此一次可能只有一个给定类型的信号挂起,随后生成的相同类型的信号将丢失。
(顺便说一句,实现选择信号传递和接受的顺序,例如,始终在传递或接受编号较低的信号之前传递或接受编号较高的信号。这意味着您新解锁的 SIGALRM 可能不会首先传递如果其他信号已准备好交付。但实际上,它会立即交付。)
我对 SIGALRM 信号被阻塞时会发生什么有疑问,它是进入挂起状态并在解除阻塞后传送还是丢失?
SIGALRM 处于待处理状态,将在解封后立即发送。
一个被阻止的信号 (SIG_BLOCK) 保持挂起状态,直到:
- 已交付,通过解除阻塞并具有默认(SIG_DFL 或 "uncaught")配置或用户提供的("caught" ) 处置,如
struct sigaction
的sa_handler
. - 已被
sigwait
,sigwaitinfo
, orsigtimedwait
接受,这意味着它已从未决信号集中删除,无需进一步操作 - 丢弃,方法是将其配置更改为 SIG_IGN ("ignored")。已经忽略的信号 will not be held pending in any case
传统的 UNIX 信号通常不排队,因此一次可能只有一个给定类型的信号挂起,随后生成的相同类型的信号将丢失。
(顺便说一句,实现选择信号传递和接受的顺序,例如,始终在传递或接受编号较低的信号之前传递或接受编号较高的信号。这意味着您新解锁的 SIGALRM 可能不会首先传递如果其他信号已准备好交付。但实际上,它会立即交付。)