Um sinal é uma forma de comunicação entre processos utilizada nos sistemas operacionais compatíveis com POSIX. Um sinal é uma notificação assíncrona enviada para um processo ou para um segmento específico dentro do mesmo processo para notificá-lo de um evento que ocorreu.
Quando um sinal é enviado, o sistema operacional interrompe o fluxo normal de execução do processo alvo para entregar o sinal. A execução pode ser interrompida durante qualquer instrução não atômica. Se o processo já registrou um manipulador de sinal, essa rotina é executada. Caso contrário, o manipulador de sinal padrão é executado.
O python permite que troquemos como os sinais serão tratados, assim dá para capturar o envio do CTRL-C e executar um procedimento de tratamento personalizado. Abaixo a gente pode observar um exemplo de como fazer este tratamento de sinal.
Precisamos importar a biblioteca SIGNAL do Python.
Utilizamos na linha 23 o comando para atribuir uma função de tratamento signal_handler() para o sinal CTRL-C (SIGINT). Nas linhas 11 a 17 criamos o nosso tratador signal_handler().
Note que ele recebe dois parâmetros, o número do sinal (pois a gente pode usar a mesma função para tratar vários sinais) e os dados da pilha.
Você pode obter este módulo em meu repositório python_codes no github.
Referências
Quer saber com mais detalhes como este processo de sinalização ocorre no sistema operacional?
Leia a seção 4.6.2 sobre manipulação de sinais do livro do Silberschatz.
Se quiser ler mais sobre a manipulação de sinais no Pythom, veja em python docs.
Nenhum comentário:
Postar um comentário