Cum să trimiteți și să capturați SIGTERM în Bash și Python

Cum Sa Trimiteti Si Sa Capturati Sigterm In Bash Si Python



În Linux, procesele comunică între ele folosind semnale. Semnalele acționează ca întreruperi software care notifică programele despre diverse evenimente sau solicitări. De exemplu, atunci când un program rulează, puteți trimite un semnal de ucidere pentru a părăsi programul. Semnalul care este trimis poate declanșa diferite acțiuni, cum ar fi oprirea unei execuții, terminarea programului, reluarea execuției etc.

Când lucrați cu Bash și Python, puteți trimite semnalul SIGTERM pentru a încheia procesul de rulare ușor. Această postare tratează despre trimiterea și capturarea SIGTERM în Bash și Python.

Ce este SIGN TERM

Sistemele Unix au trei categorii de semnale: sistem, dispozitiv și semnale definite de utilizator. Fiecare semnal are o valoare întreagă. Puteți executa semnalul specificând numele sau valoarea sa întreagă.







SIGTERM este un semnal cu o valoare întreagă de 15. Este executat atunci când doriți să încheiați încet un proces care rulează. Următoarea este sintaxa pentru a utiliza SIGTERM în Bash:



ucide TERMENUL ȚINTĂ < PID >

sau

ucide - cincisprezece < PID >

Puteți verifica toate semnalele disponibile folosind următoarea comandă:



ucide -l





Cum să trimiteți și să capturați SIGTERM în Bash și Python

Poate doriți să trimiteți și să capturați SIGTERM în Bash și Python în cazuri diferite. Când executați programul Bash sau Python, puteți executa semnalul SIGTERM pentru a opri programul. Avem diferite exemple pentru a înțelege cum trimiteți și capturați SIGTERM în Bash și Python.

1. Utilizarea unui Script Python

Când utilizați Python 1.4 și cele mai recente versiuni, puteți utiliza biblioteca de semnal pentru a trimite și a captura SIGTERM. Importați biblioteca în programul dvs. pentru a defini modul în care programul dvs. ar trebui să capteze și să reacționeze la diferite semnale. Biblioteca de semnale vă permite să creați un handler de semnal pentru a raporta numărul întreg al semnalului primit. Puteți apoi să înregistrați semnalul capturat și să obțineți informații despre procesul curent, cum ar fi PID-ul acestuia. Să dăm un exemplu.



Avem un script Python care prinde numărul întreg al semnalului trimis. Mai mult, prinde PID-ul procesului curent.

În imaginea următoare, executăm scriptul Python și avem o buclă while care se execută la fiecare câteva secunde. Pe alt terminal, putem trimite semnalul SIGTERM pentru a opri procesul prin specificarea PID-ului pe care îl obținem din executarea scriptului Python:

Odată ce trimitem semnalul SIGTERM, observăm că scriptul se oprește. Asta pentru că captează numărul întreg de semnal. În acest caz, executăm kill -15 pentru semnalul SIGTERM. De asemenea, puteți trimite semnalul de ucidere SIGTERM folosind cuvântul cheie SIGTERM în loc de valoarea sa întreagă. Încă obținem același rezultat.

De asemenea, puteți executa jobul dvs. Python folosind următoarea sintaxă:

python3 < scenariu/lucru > &

Spre deosebire de prima metodă, atunci când trimitem SIGTERM folosind această opțiune, putem vedea că ID-ul jobului este tipărit când jobul începe să se execute. După ce îl omorâm, obținem statutul „terminat”. SIGTERM poate fi trimis prin specificarea numelui sau întregului său.

2. Utilizarea unui script Bash

Puteți folosi comanda „capcană” pentru a capta un semnal atunci când executați un script Bash. În acest exemplu, am adăugat comanda „capcană” pentru a captura semnalul SIGTERM. Scriptul este o buclă „for” pentru a executa comanda „date” de o mie de ori dacă nu este trimis niciun semnal SIGTERM.

Când executați scriptul Bash, puteți trimite semnalul SIGTERM apăsând tasta Ctrl + Z tastele de la tastatură. Comanda „capcană” captează semnalul transmis, iar bucla „for” se va opri din execuție. Veți obține o ieșire care confirmă că lucrarea în curs de desfășurare a primit un semnal SIGTERM și s-a oprit.

Așa trimiteți și prindeți SIGTERM în Bash.

Concluzie

Puteți trimite diferite semnale pentru a atinge diferite obiective atunci când executați o lucrare sau un program. SIGTERM este trimis pentru a opri un program încet. Pentru Python, aveți nevoie de un handler de semnal pentru a captura un semnal și puteți trimite SIGTERM folosind comanda „kill”. Puteți folosi comanda „capcană” și tastele de la tastatură pe Bash pentru a captura și trimite semnalul SIGTERM. Această postare a prezentat diferite exemple despre cum să realizați acest lucru în detaliu.