Hvordan sende og fange SIGTERM i Bash og Python

Hvordan Sende Og Fange Sigterm I Bash Og Python



I Linux kommuniserer prosesser med hverandre ved hjelp av signaler. Signalene fungerer som programvareavbrudd som varsler programmene om ulike hendelser eller forespørsler. For eksempel, når et program kjører, kan du sende et drepesignal for å avslutte programmet. Signalet som sendes kan utløse ulike handlinger som å stoppe en kjøring, avslutte programmet, gjenoppta kjøringen osv.

Når du arbeider med Bash og Python, kan du sende SIGTERM-signalet for å avslutte kjøreprosessen mykt. Dette innlegget dekker om å sende og fange SIGTERM i Bash og Python.

Hva er SIGN TERM

Unix-systemer har tre kategorier av signaler: system, enhet og brukerdefinerte signaler. Hvert signal har en heltallsverdi. Du kan utføre signalet ved å spesifisere navnet eller heltallsverdien.







SIGTERM er et signal med en heltallsverdi på 15. Det utføres når du ønsker å avslutte en løpende prosess mykt. Følgende er syntaksen for å bruke SIGTERM i Bash:



drep MÅLTID < PID >

eller

drepe - femten < PID >

Du kan sjekke alle tilgjengelige signaler ved å bruke følgende kommando:



drepe -l





Hvordan sende og fange SIGTERM i Bash og Python

Det kan være lurt å sende og fange SIGTERM i Bash og Python i forskjellige tilfeller. Når du kjører Bash- eller Python-programmet ditt, kan du kjøre SIGTERM-signalet for å drepe programmet. Vi har forskjellige eksempler for å forstå hvordan du sender og fanger SIGTERM i Bash og Python.

1. Bruke et Python-skript

Når du bruker Python 1.4 og nyeste versjoner, kan du bruke signalbiblioteket til å sende og fange SIGTERM. Importer biblioteket i programmet for å definere hvordan programmet skal fange opp og reagere på ulike signaler. Signalbiblioteket lar deg opprette en signalbehandler for å rapportere hele tallet til det mottatte signalet. Du kan deretter registrere det fangede signalet og få informasjon om den gjeldende prosessen, for eksempel PID. La oss gi et eksempel.



Vi har et Python-skript som fanger opp hele tallet til det sendte signalet. Dessuten fanger den opp PID-en til den nåværende prosessen.

I det følgende bildet kjører vi Python-skriptet og har en while-løkke som kjøres med noen sekunders mellomrom. På en annen terminal kan vi sende SIGTERM-signalet for å drepe prosessen ved å spesifisere PID som vi får fra å utføre Python-skriptet:

Når vi sender SIGTERM-signalet, legger vi merke til at skriptet slutter å kjøre. Det er fordi den fanger opp signalheltallet. I dette tilfellet utfører vi kill -15 for SIGTERM-signalet. Du kan også sende SIGTERM kill-signalet ved å bruke SIGTERM nøkkelordet i stedet for dets heltallsverdi. Vi får fortsatt samme resultat.

Du kan også utføre Python-jobben din ved å bruke følgende syntaks:

python3 < manus/jobb > &

I motsetning til den første metoden, når vi sender SIGTERM ved å bruke dette alternativet, kan vi se at jobb-IDen skrives ut når jobben begynner å kjøre. Etter at vi har drept den, får vi statusen 'ferdig'. SIGTERM kan sendes ved å spesifisere navnet eller heltall.

2. Bruke et Bash-skript

Du kan bruke 'trap'-kommandoen til å fange et signal når du kjører et Bash-skript. I dette eksemplet la vi til 'trap'-kommandoen for å fange SIGTERM-signalet. Skriptet er en 'for'-løkke for å utføre 'dato'-kommandoen tusen ganger hvis det ikke sendes noe SIGTERM-signal.

Når du kjører Bash-skriptet, kan du sende SIGTERM-signalet ved å trykke på Ctrl + Z tastaturtaster. 'Trap'-kommandoen fanger opp det overførte signalet, og 'for'-sløyfen vil slutte å kjøre. Du vil få en utgang som bekrefter at den kjørende jobben har mottatt et SIGTERM-signal og har stoppet.

Det er slik du sender og fanger SIGTERM i Bash.

Konklusjon

Du kan sende forskjellige signaler for å oppnå ulike mål når du utfører en jobb eller et program. SIGTERM sendes for å stoppe et program mykt. For Python trenger du en signalbehandler for å fange et signal, og du kan sende SIGTERM ved å bruke 'kill'-kommandoen. Du kan bruke 'trap'-kommandoen og tastaturtastene på Bash for å fange og sende SIGTERM-signalet. Dette innlegget presenterte forskjellige eksempler på hvordan du oppnår det i detalj.