A janela de tempo ainda existe quando o sinal não está bloqueado

2

Muitos livros dizem que existe uma janela de tempo entre a geração e a entrega do sinal quando o sinal não está bloqueado.

Então, eu me pergunto se a janela de tempo ainda existe quando o sinal não está bloqueado ou a geração e entrega do sinal é uma operação atômica?

Se a janela de tempo ainda existir, o que acontecerá quando alguns outros sigals (iguais ou não iguais ao sinal gerado) também forem gerados durante a janela de tempo?

    
por nofaiture 20.03.2014 / 15:33

1 resposta

1

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.

    
por 20.03.2014 / 16:33