Tentando ver manipuladores padrão para vários sinais

2

Eu entendo que existe um manipulador de sinal padrão, que é uma função para cada sinal, como SIGKILL etc. Em qual arquivo está escrito? Eu tentei olhar para signal.h, mas não consegui encontrá-lo lá.

Espero que cada manipulador de sinal tenha pelo menos uma função (manipulador).

Por favor, ajude-me a localizar este arquivo

    
por user3891236 14.12.2014 / 05:23

1 resposta

6

Não há "arquivo" como você deseja ver, a menos que você queira ler o código do kernel.

Isso é um pouco simplificado demais. Veja o capítulo em Rago & Stevens on Signals em 'Advanced Programming in the UNIX Environment' para muito mais informação.

Existem duas partes para 'manipulação de sinal padrão'. Estes são construídos no kernel. Quando o agendador percebe que há um sinal pendente para um processo, ele fornece ao processador a cpu, se necessário (uma alternância de contexto). Em seguida, o sinal é entregue ao processo. O processo tem uma máscara de sinal que permite ignorar muitos sinais se a máscara for deliberadamente ajustada, dois sinais SIGKILL e SIGSTOP não podem ser ignorados ou bloqueados. Então o processo agora tem um sinal. Se não houver um manipulador, o kernel assume a ação padrão para o sinal.

Existe uma lista de ações padrão para sinais. O SIGSEGV, por exemplo, encerra o processo depois de ter esvaziado o núcleo. Michael Kerrisk tem uma explicação das ações padrão. Isso é o que eu acho que você quer.

link

O kernel tem código para lidar com todas as respostas padrão do sinal para o processo.

Se o kernel receber um sinal para "propriamente dito" (dependendo do tipo de UNIX sobre o qual estamos falando), o kernel entra em pane, grava um despejo de memória e deixa você com dor de cabeça. - que não é o que você quer.

    
por 14.12.2014 / 05:52

Tags