Kako poslati in ujeti SIGTERM v Bashu in Pythonu

Kako Poslati In Ujeti Sigterm V Bashu In Pythonu



V Linuxu procesi med seboj komunicirajo s pomočjo signalov. Signali delujejo kot programske prekinitve, ki obveščajo programe o različnih dogodkih ali zahtevah. Na primer, ko se program izvaja, lahko pošljete kill signal za izhod iz programa. Poslani signal lahko sproži različna dejanja, kot je ustavitev izvajanja, zaključek programa, nadaljevanje izvajanja itd.

Ko delate z Bashom in Pythonom, lahko pošljete signal SIGTERM, da nežno prekinete tekoči proces. Ta objava obravnava pošiljanje in lovljenje SIGTERM v Bash in Python.

Kaj je SIGN TERM

Sistemi Unix imajo tri kategorije signalov: sistem, naprava in uporabniško definirani signali. Vsak signal ima celoštevilsko vrednost. Signal lahko izvedete tako, da podate njegovo ime ali njegovo celoštevilsko vrednost.







SIGTERM je signal s celoštevilsko vrednostjo 15. Izvede se, ko želite nežno končati tekoči proces. Sledi sintaksa za uporabo SIGTERM v Bashu:



ubij CILJNI IZRAZ < PID >

oz

ubiti - petnajst < PID >

Vse razpoložljive signale lahko preverite z naslednjim ukazom:



ubiti -l





Kako poslati in ujeti SIGTERM v Bashu in Pythonu

Morda boste želeli poslati in ujeti SIGTERM v Bash in Python v različnih primerih. Ko izvajate svoj program Bash ali Python, lahko izvedete signal SIGTERM, da ubijete program. Imamo različne primere, da razumemo, kako pošljete in ujamete SIGTERM v Bashu in Pythonu.

1. Uporaba skripta Python

Ko uporabljate Python 1.4 in najnovejše različice, lahko uporabite knjižnico signalov za pošiljanje in lovljenje SIGTERM. Uvozite knjižnico v svoj program, da določite, kako naj vaš program zajema različne signale in se nanje odziva. Knjižnica signalov vam omogoča, da ustvarite upravljalnik signalov za poročanje celega števila prejetega signala. Nato lahko registrirate zajeti signal in pridobite informacije o trenutnem procesu, kot je njegov PID. Naj navedemo primer.



Imamo skript Python, ki ujame celo število poslanega signala. Poleg tega ujame PID trenutnega procesa.

Na naslednji sliki izvajamo skript Python in imamo zanko while, ki se izvede vsakih nekaj sekund. Na drugem terminalu lahko pošljemo signal SIGTERM, da prekinemo proces, tako da podamo PID, ki ga dobimo z izvajanjem skripta Python:

Ko pošljemo signal SIGTERM, opazimo, da se skript preneha izvajati. To je zato, ker zajame celo število signala. V tem primeru izvedemo kill -15 za signal SIGTERM. Signal za uničenje SIGTERM lahko pošljete tudi s ključno besedo SIGTERM namesto njene vrednosti celega števila. Še vedno dobimo enak rezultat.

Svojo nalogo Python lahko izvedete tudi z naslednjo sintakso:

python3 < scenarij/delo > &

Za razliko od prve metode, ko pošljemo SIGTERM s to možnostjo, lahko vidimo, da se ID opravila natisne, ko se opravilo začne izvajati. Ko ga ubijemo, dobimo status »končano«. SIGTERM lahko pošljete tako, da navedete njegovo ime ali celo število.

2. Uporaba skripta Bash

Z ukazom »trap« lahko ujamete signal pri izvajanju skripta Bash. V tem primeru smo dodali ukaz »trap«, da ujamemo signal SIGTERM. Skript je zanka 'za' za tisočkratno izvedbo ukaza 'datum', če ni poslan signal SIGTERM.

Ko izvajate skript Bash, lahko pošljete signal SIGTERM s pritiskom na Ctrl + Z tipke na tipkovnici. Ukaz »trap« zajame oddani signal, zanka »for« pa bo prenehala z izvajanjem. Dobili boste izhod, ki potrjuje, da je opravilo v teku prejelo signal SIGTERM in se ustavilo.

Tako pošljete in ujamete SIGTERM v Bashu.

Zaključek

Pri izvajanju opravila ali programa lahko pošiljate različne signale za doseganje različnih ciljev. SIGTERM se pošlje za tiho zaustavitev programa. Za Python potrebujete upravljalnik signalov, da ujamete signal, SIGTERM pa lahko pošljete z ukazom »kill«. Za zajemanje in pošiljanje signala SIGTERM lahko uporabite ukaz »trap« in tipke na tipkovnici na Bashu. Ta objava je podrobno predstavila različne primere, kako to doseči.