Come inviare e catturare SIGTERM in Bash e Python

Come Inviare E Catturare Sigterm In Bash E Python



In Linux, i processi comunicano tra loro tramite segnali. I segnali agiscono come interruzioni software che notificano ai programmi vari eventi o richieste. Ad esempio, quando un programma è in esecuzione, puoi inviare un segnale kill per uscire dal programma. Il segnale inviato può attivare diverse azioni come l'interruzione di un'esecuzione, la chiusura del programma, la ripresa dell'esecuzione, ecc.

Quando lavori con Bash e Python, puoi inviare il segnale SIGTERM per terminare dolcemente il processo in esecuzione. Questo post riguarda l'invio e la cattura di SIGTERM in Bash e Python.

Cos'è il TERMINE DEL SEGNO

I sistemi Unix hanno tre categorie di segnali: sistema, dispositivo e segnali definiti dall'utente. Ogni segnale ha un valore intero. È possibile eseguire il segnale specificandone il nome o il valore intero.







SIGTERM è un segnale con un valore intero di 15. Viene eseguito quando si desidera terminare dolcemente un processo in esecuzione. La seguente è la sintassi per usare SIGTERM in Bash:



kill TERMINE TARGET < PID >

O

uccisione - quindici < PID >

Puoi controllare tutti i segnali disponibili usando il seguente comando:



uccidere -l





Come inviare e catturare SIGTERM in Bash e Python

Potresti voler inviare e catturare SIGTERM in Bash e Python in diverse istanze. Quando esegui il tuo programma Bash o Python, puoi eseguire il segnale SIGTERM per terminare il programma. Abbiamo diversi esempi per capire come invii e catturi SIGTERM in Bash e Python.

1. Utilizzo di uno script Python

Quando si utilizza Python 1.4 e versioni più recenti, è possibile utilizzare la libreria di segnali per inviare e catturare SIGTERM. Importa la libreria nel tuo programma per definire come il tuo programma dovrebbe catturare e reagire a diversi segnali. La libreria di segnali consente di creare un gestore di segnale per riportare il numero intero del segnale ricevuto. È quindi possibile registrare il segnale catturato e ottenere le informazioni sul processo corrente come il suo PID. Facciamo un esempio.



Abbiamo uno script Python che cattura il numero intero del segnale inviato. Inoltre, rileva il PID del processo corrente.

Nell'immagine seguente, eseguiamo lo script Python e abbiamo un ciclo while che viene eseguito ogni pochi secondi. Su un altro terminale, possiamo inviare il segnale SIGTERM per terminare il processo specificando il PID che otteniamo dall'esecuzione dello script Python:

Una volta inviato il segnale SIGTERM, notiamo che lo script interrompe l'esecuzione. Questo perché cattura il numero intero del segnale. In questo caso, eseguiamo il kill -15 per il segnale SIGTERM. Puoi anche inviare il segnale kill SIGTERM usando la parola chiave SIGTERM invece del suo valore intero. Otteniamo ancora lo stesso risultato.

Puoi anche eseguire il tuo lavoro Python usando la seguente sintassi:

python3 < copione/lavoro > &

A differenza del primo metodo, quando inviamo il SIGTERM utilizzando questa opzione, possiamo vedere che l'ID del lavoro viene stampato quando il lavoro inizia l'esecuzione. Dopo averlo ucciso, otteniamo lo stato 'fatto'. Il SIGTERM può essere inviato specificando il suo nome o il suo numero intero.

2. Utilizzo di uno script Bash

Puoi usare il comando 'trap' per catturare un segnale durante l'esecuzione di uno script Bash. In questo esempio, abbiamo aggiunto il comando 'trap' per catturare il segnale SIGTERM. Lo script è un ciclo 'for' per eseguire il comando 'date' mille volte se non viene inviato alcun segnale SIGTERM.

Quando si esegue lo script Bash, è possibile inviare il segnale SIGTERM premendo il CTRL+Z tasti della tastiera. Il comando 'trap' cattura il segnale trasmesso e il ciclo 'for' terminerà l'esecuzione. Otterrai un output che conferma che il lavoro in esecuzione ha ricevuto un segnale SIGTERM e si è fermato.

È così che invii e catturi SIGTERM in Bash.

Conclusione

È possibile inviare segnali diversi per raggiungere obiettivi diversi durante l'esecuzione di un lavoro o di un programma. SIGTERM viene inviato per interrompere dolcemente un programma. Per Python, hai bisogno di un gestore di segnale per catturare un segnale e puoi inviare SIGTERM usando il comando 'kill'. Puoi utilizzare il comando 'trap' e i tasti della tastiera su Bash per acquisire e inviare il segnale SIGTERM. Questo post ha presentato diversi esempi su come ottenerlo in dettaglio.