Hur man skickar och fångar SIGTERM i Bash och Python

Hur Man Skickar Och Fangar Sigterm I Bash Och Python



I Linux kommunicerar processer med varandra med hjälp av signaler. Signalerna fungerar som mjukvaruavbrott som meddelar programmen om olika händelser eller förfrågningar. Till exempel, när ett program körs, kan du skicka en dödsignal för att avsluta programmet. Signalen som skickas kan utlösa olika åtgärder som att stoppa en exekvering, avsluta programmet, återuppta exekveringen, etc.

När du arbetar med Bash och Python kan du skicka SIGTERM-signalen för att mjukt avsluta den pågående processen. Det här inlägget handlar om att skicka och fånga SIGTERM i Bash och Python.

Vad är SIGN TERM

Unix-system har tre kategorier av signaler: system, enhet och användardefinierade signaler. Varje signal har ett heltalsvärde. Du kan exekvera signalen genom att ange dess namn eller dess heltalsvärde.







SIGTERM är en signal med ett heltalsvärde på 15. Den exekveras när du vill avsluta en pågående process mjukt. Följande är syntaxen för att använda SIGTERM i Bash:



döda MÅLTID < PID >

eller

döda - femton < PID >

Du kan kontrollera alla tillgängliga signaler med följande kommando:



döda -l





Hur man skickar och fångar SIGTERM i Bash och Python

Du kanske vill skicka och fånga SIGTERM i Bash och Python i olika instanser. När du kör ditt Bash- eller Python-program kan du köra SIGTERM-signalen för att döda programmet. Vi har olika exempel för att förstå hur du skickar och fångar SIGTERM i Bash och Python.

1. Använda ett Python-skript

När du använder Python 1.4 och senaste versioner kan du använda signalbiblioteket för att skicka och fånga SIGTERM. Importera biblioteket i ditt program för att definiera hur ditt program ska fånga och reagera på olika signaler. Signalbiblioteket låter dig skapa en signalhanterare för att rapportera den mottagna signalens heltal. Du kan sedan registrera den infångade signalen och få information om den aktuella processen såsom dess PID. Låt oss ge ett exempel.



Vi har ett Python-skript som fångar heltal av den skickade signalen. Dessutom fångar den PID för den aktuella processen.

I följande bild kör vi Python-skriptet och har en while-loop som körs med några sekunders mellanrum. På en annan terminal kan vi skicka SIGTERM-signalen för att döda processen genom att specificera PID som vi får från att köra Python-skriptet:

När vi skickar SIGTERM-signalen märker vi att skriptet slutar köras. Det beror på att den fångar signalens heltal. I det här fallet utför vi killen -15 för SIGTERM-signalen. Du kan också skicka SIGTERM-dödsignalen med nyckelordet SIGTERM istället för dess heltalsvärde. Vi får fortfarande samma resultat.

Du kan också köra ditt Python-jobb med följande syntax:

python3 < manus/jobb > &

Till skillnad från den första metoden, när vi skickar SIGTERM med detta alternativ, kan vi se att jobb-ID:t skrivs ut när jobbet börjar köras. Efter att vi dödat det får vi statusen 'klar'. SIGTERM kan skickas genom att ange dess namn eller dess heltal.

2. Använda ett Bash-skript

Du kan använda kommandot 'trap' för att fånga en signal när du kör ett Bash-skript. I det här exemplet lade vi till kommandot 'trap' för att fånga SIGTERM-signalen. Skriptet är en 'for'-loop för att utföra kommandot 'date' tusen gånger om ingen SIGTERM-signal skickas.

När du kör Bash-skriptet kan du skicka SIGTERM-signalen genom att trycka på Ctrl + Z tangentbordstangenter. Kommandot 'trap' fångar den sända signalen, och 'for'-loopen kommer att sluta exekvera. Du får en utgång som bekräftar att det pågående jobbet har fått en SIGTERM-signal och har stoppats.

Det är så du skickar och fångar SIGTERM i Bash.

Slutsats

Du kan skicka olika signaler för att uppnå olika mål när du utför ett jobb eller program. SIGTERM skickas för att stoppa ett program mjukt. För Python behöver du en signalhanterare för att fånga en signal, och du kan skicka SIGTERM med kommandot 'kill'. Du kan använda kommandot 'trap' och tangentbordstangenterna på Bash för att fånga och skicka SIGTERM-signalen. Det här inlägget presenterade olika exempel på hur man uppnår det i detalj.