Como enviar e capturar SIGTERM em Bash e Python

Como Enviar E Capturar Sigterm Em Bash E Python



No Linux, os processos se comunicam entre si usando sinais. Os sinais agem como interrupções de software que notificam os programas sobre vários eventos ou solicitações. Por exemplo, quando um programa está em execução, você pode enviar um sinal de interrupção para sair do programa. O sinal enviado pode desencadear diferentes ações, como parar uma execução, encerrar o programa, retomar a execução, etc.

Ao trabalhar com Bash e Python, você pode enviar o sinal SIGTERM para encerrar o processo em execução suavemente. Este post aborda sobre como enviar e capturar SIGTERM em Bash e Python.

O que é TERMO DE ASSINATURA

Os sistemas Unix têm três categorias de sinais: sistema, dispositivo e sinais definidos pelo usuário. Cada sinal tem um valor inteiro. Você pode executar o sinal especificando seu nome ou seu valor inteiro.







SIGTERM é um sinal com um valor inteiro de 15. Ele é executado quando você deseja encerrar um processo em execução suavemente. A seguir está a sintaxe para usar o SIGTERM no Bash:



matar TERMO-ALVO < PID >

ou

matar - quinze < PID >

Você pode verificar todos os sinais disponíveis usando o seguinte comando:



matar-l





Como enviar e capturar SIGTERM em Bash e Python

Você pode querer enviar e capturar SIGTERM em Bash e Python em instâncias diferentes. Ao executar seu programa Bash ou Python, você pode executar o sinal SIGTERM para encerrar o programa. Temos diferentes exemplos para entender como enviar e capturar SIGTERM em Bash e Python.

1. Usando um script Python

Ao usar o Python 1.4 e as versões mais recentes, você pode utilizar a biblioteca de sinais para enviar e capturar SIGTERM. Importe a biblioteca em seu programa para definir como seu programa deve capturar e reagir a diferentes sinais. A biblioteca de sinais permite criar um manipulador de sinal para relatar o número inteiro do sinal recebido. Você pode então registrar o sinal capturado e obter as informações sobre o processo atual, como seu PID. Vamos dar um exemplo.



Temos um script Python que captura o inteiro do sinal enviado. Além disso, ele captura o PID do processo atual.

Na imagem a seguir, executamos o script Python e temos um loop while que é executado a cada poucos segundos. Em outro terminal, podemos enviar o sinal SIGTERM para encerrar o processo especificando o PID que obtemos ao executar o script Python:

Assim que enviamos o sinal SIGTERM, notamos que o script para de executar. Isso porque ele captura o inteiro do sinal. Neste caso, executamos o kill -15 para o sinal SIGTERM. Você também pode enviar o sinal de interrupção SIGTERM usando a palavra-chave SIGTERM em vez de seu valor inteiro. Ainda obtemos o mesmo resultado.

Você também pode executar seu trabalho Python usando a seguinte sintaxe:

python3 < roteiro/trabalho > &

Ao contrário do primeiro método, quando enviamos o SIGTERM usando esta opção, podemos ver que o ID do trabalho é impresso quando o trabalho começa a ser executado. Depois de matá-lo, obtemos o status 'concluído'. O SIGTERM pode ser enviado especificando seu nome ou seu inteiro.

2. Usando um script Bash

Você pode usar o comando “trap” para capturar um sinal ao executar um script Bash. Neste exemplo, adicionamos o comando “trap” para capturar o sinal SIGTERM. O script é um loop “for” para executar o comando “date” mil vezes se nenhum sinal SIGTERM for enviado.

Ao executar o script Bash, você pode enviar o sinal SIGTERM pressionando o botão Ctrl + Z teclas do teclado. O comando “trap” captura o sinal transmitido e o loop “for” encerra a execução. Você obterá uma saída que confirma que o trabalho em execução recebeu um sinal SIGTERM e parou.

É assim que você envia e pega o SIGTERM no Bash.

Conclusão

Você pode enviar diferentes sinais para atingir diferentes objetivos ao executar um trabalho ou programa. SIGTERM é enviado para interromper um programa suavemente. Para Python, você precisa de um manipulador de sinal para capturar um sinal e pode enviar o SIGTERM usando o comando “kill”. Você pode usar o comando “trap” e as teclas do teclado no Bash para capturar e enviar o sinal SIGTERM. Este post apresentou diferentes exemplos de como conseguir isso em detalhes.