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.