Algumas das respostas às suas perguntas dependem de como o manipulador de sinais é configurado. Acho que estamos vendo isso no contexto de configuração de manipuladores de sinais por meio da chamada de sistema sigaction(2)
.
Um dos elementos de um struct sigaction
é chamado de "sa_mask". De man 2 sigaction
:
sa_mask gives a mask of signals which should be blocked during execution of the
signal handler. In addition, the signal which triggered the handler will be
blocked, unless the SA_NODEFER flag is used.
Parece que, se você configurar corretamente, até mesmo o sinal sendo manipulado não será bloqueado. Pessoalmente, não consigo imaginar um uso para isso, mas tenho uma imaginação notoriamente limitada.
Então, eu diria "sim, há uma janela entre geração de sinal e chamada do manipulador de sinal de processos de recebimento". Assim, outros sinais podem ser gerados e enviados para o processo de recebimento. Quanto ao que acontece com esses "outros sinais": parece que os sinais não são "enfileirados": veja este Resposta do stackoverflow , exceto os sinais de "tempo real" . Ou seja, se o kernel receber um monte de kill(some_pid, SIGHUP)
, o processo denotado por some_pid
terá sua função de manipulador de sinal SIGHUP chamada uma vez.