SIGALRM 被掩码屏蔽

SIGALRM blocked by a mask

我对 SIGALRM 信号被阻塞时会发生什么有疑问,它是进入挂起状态并在解除阻塞后传送还是丢失?

SIGALRM 处于待处理状态,将在解封后立即发送。

一个被阻止的信号 (SIG_BLOCK) 保持挂起状态,直到:

  1. 已交付,通过解除阻塞并具有默认(SIG_DFL 或 "uncaught")配置或用户提供的("caught" ) 处置,如 struct sigactionsa_handler.
  2. 已被 sigwait, sigwaitinfo, or sigtimedwait 接受,这意味着它已从未决信号集中删除,无需进一步操作
  3. 丢弃,方法是将其配置更改为 SIG_IGN ("ignored")。已经忽略的信号 will not be held pending in any case

传统的 UNIX 信号通常不排队,因此一次可能只有一个给定类型的信号挂起,随后生成的相同类型的信号将丢失。

(顺便说一句,实现选择信号传递和接受的顺序,例如,始终在传递或接受编号较低的信号之前传递或接受编号较高的信号。这意味着您新解锁的 SIGALRM 可能不会首先传递如果其他信号已准备好交付。但实际上,它会立即交付。)