Os múltiplos sinais dados a um processo são atendidos sequencialmente ou seu manipulador de sinais pode ser cascateado?

4

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:

  1. quando um sinal é gerado, ele é adicionado na lista pendente e o sinalizador TIF_SIGPENDING é definido. Na programação de interrupção do timer, esta flag é verificada (não tenho certeza disso), o que leva a execução do do_signal () que dequeues o sinal e recalcula o sinalizador TIF_SIGPENDING. Se houver mais sinais na lista pendente, esse sinalizador será definido novamente.

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?

    
por PSB 20.10.2015 / 10:10

0 respostas

Tags