Além do problema de "muitos sinais", os sinais podem ser explicitamente ignorados. De man 2 signal
:
If the signal signum is delivered to the process, then one of the
following happens:
* If the disposition is set to SIG_IGN, then the signal is ignored.
Os sinais também podem ser bloqueados. De man 7 signal
;
A signal may be blocked, which means that it will not be delivered
until it is later unblocked. Between the time when it is generated
and when it is delivered a signal is said to be pending.
Os conjuntos de sinais bloqueados e ignorados são herdados por processos filhos, portanto, pode acontecer que o processo pai de sua aplicação tenha ignorado ou bloqueado um desses sinais.
O que acontece quando vários sinais são entregues antes de o processo terminar de lidar com os anteriores? Isso depende do sistema operacional. A% man_de% manpage vinculada acima discute:
- O System V redefiniria a disposição do sinal para o padrão. Pior, a rápida entrega de múltiplos sinais resultaria em chamadas recursivas (?).
- O BSD bloquearia automaticamente o sinal até que o manipulador seja concluído.
- No Linux, isso depende dos sinalizadores de compilação definidos para o GNU
signal(2)
, mas esperaria o comportamento do BSD.