Eu estava desenvolvendo meu próprio mecanismo de manipulação de sinais no espaço do usuário. ao navegar pelo código do kernel e executar algum código-c. Eu percebi,
Cenário 1: Quando meu código está executando um manipulador de sinal no recebimento do sinal, e digamos que um novo sinal de tipo diferente é encontrado (esse novo sinal também é tratado), o novo manipulador de sinal de sinais (SH2) é invocado salvando o contexto do manipulador de sinais já em execução (SH1). Quando o SH2 for concluído, o SH1 será novamente executado a partir de onde ele saiu.
Cenário 2: registrei o manipulador para quatro sinais SIGINT, SIGUSR2, SIGHUP. Então eu bloqueei todos esses sinais e gerou esses sinais usando o comando "kill" do terminal. Após o que eu novamente desbloqueei esses sinais. O que eu observei foi que estes sinais foram entregues sequencialmente, seus manipuladores foram executados sequencialmente.
Então, quando os manipuladores de sinal são executados sequencialmente e quando estão em cascata.
Pesquisei a fonte do kernel:
Se agora o temporizador do planejador expirar, o novo manipulador de sinal será chamado (levando à colocação em cascata do manipulador de sinal) Então, como o manipulador de sinal é executado seqüencialmente em alguns casos?