Wie man SIGTERM in Bash und Python sendet und auffängt
In Linux kommunizieren Prozesse miteinander über Signale. Die Signale wirken als Software-Interrupts, die die Programme über verschiedene Ereignisse oder Anfragen informieren. Beispielsweise können Sie, wenn ein Programm läuft, ein Kill-Signal senden, um das Programm zu beenden. Das gesendete Signal kann unterschiedliche Aktionen auslösen, wie das Stoppen einer Ausführung, das Beenden des Programms, das Fortsetzen der Ausführung usw.
Wenn Sie mit Bash und Python arbeiten, können Sie das SIGTERM-Signal senden, um den laufenden Prozess sanft zu beenden. Dieser Beitrag behandelt das Senden und Empfangen von SIGTERM in Bash und Python.
Was ist SIGTERM
Unix-Systeme haben drei Kategorien von Signalen: Systemsignale, Gerätesignale und benutzerdefinierte Signale. Jedes Signal hat einen ganzzahligen Wert. Sie können das Signal ausführen, indem Sie seinen Namen oder seinen ganzzahligen Wert angeben.
SIGTERM ist ein Signal mit einem ganzzahligen Wert von 15. Es wird ausgeführt, wenn Sie einen laufenden Prozess sanft beenden möchten. Folgendes ist die Syntax zur Verwendung von SIGTERM in Bash:
kill -SIGTERM <PID>
or
kill -15 <PID>Sie können alle verfügbaren Signale mit dem folgenden Befehl überprüfen:
kill -l
Wie man SIGTERM in Bash und Python sendet und empfängt
Vielleicht möchten Sie SIGTERM in Bash und Python in verschiedenen Instanzen senden und empfangen. Wenn Sie Ihr Bash- oder Python-Programm ausführen, können Sie das SIGTERM-Signal ausführen, um das Programm zu beenden. Wir haben verschiedene Beispiele, um zu verstehen, wie Sie SIGTERM in Bash und Python senden und empfangen.
1. Verwendung eines Python-Skripts
Beim Gebrauch von Python 1.4 und den neuesten Versionen können Sie die Signalbibliothek verwenden, um SIGTERM zu senden und zu empfangen. Importieren Sie die Bibliothek in Ihr Programm, um zu definieren, wie Ihr Programm verschiedene Signale erfassen und darauf reagieren soll. Die Signalbibliothek ermöglicht es Ihnen, einen Signalhandler zu erstellen, um die Ganzzahl des empfangenen Signals zu melden. Sie können dann das erfasste Signal registrieren und Informationen über den aktuellen Prozess wie seine PID abrufen. Lassen Sie uns ein Beispiel geben.
Wir haben ein Python-Skript, das die Ganzzahl des gesendeten Signals erfasst. Außerdem erfasst es die PID des aktuellen Prozesses.
Im folgenden Bild führen wir das Python-Skript aus und haben eine While-Schleife, die alle paar Sekunden ausgeführt wird. In einem anderen Terminal können wir das SIGTERM-Signal senden, um den Prozess zu beenden, indem wir die PID angeben, die wir durch die Ausführung des Python-Skripts erhalten:
Sobald wir das SIGTERM-Signal senden, stellen wir fest, dass das Skript die Ausführung stoppt. Das liegt daran, dass es das Signal-Integer erfasst. In diesem Fall führen wir kill -15 für das SIGTERM-Signal aus. Sie können das SIGTERM-Killsignal auch mit dem Schlüsselwort SIGTERM anstelle seines Integerwerts senden. Wir erhalten immer noch dasselbe Ergebnis.
Sie können Ihren Python-Job auch mit der folgenden Syntax ausführen:
python3 <script/job> &
Im Gegensatz zur ersten Methode sehen wir, dass die Job-ID ausgegeben wird, wenn der Job mit dieser Option zu laufen beginnt, wenn wir das SIGTERM senden. Nachdem wir es getötet haben, erhalten wir den Status "done". Das SIGTERM kann durch Angabe seines Namens oder seiner Zahl gesendet werden.
2. Verwendung eines Bash-Skripts
Sie können den "trap"-Befehl verwenden, um ein Signal beim Ausführen eines Bash-Skripts abzufangen. In diesem Beispiel haben wir den "trap"-Befehl hinzugefügt, um das SIGTERM-Signal abzufangen. Das Skript ist eine "for"-Schleife, die den "date"-Befehl tausend Mal ausführt, wenn kein SIGTERM-Signal gesendet wird.
Beim Ausführen des Bash-Skripts können Sie das SIGTERM-Signal senden, indem Sie die Strg + Z Tastenkombination drücken. Der „trap“-Befehl fängt das übertragene Signal ein, und die „for“-Schleife wird die Ausführung einstellen. Sie erhalten eine Ausgabe, die bestätigt, dass der laufende Job ein SIGTERM-Signal empfangen hat und gestoppt wurde.
So sendest und fängst du SIGTERM in Bash.
Fazit
Sie können verschiedene Signale senden, um unterschiedliche Ziele zu erreichen, wenn Sie einen Job oder ein Programm ausführen. SIGTERM wird gesendet, um ein Programm sanft zu stoppen. Für Python benötigen Sie einen Signalhandler, um ein Signal zu erfassen, und Sie können das SIGTERM mit dem "kill"-Befehl senden. Sie können den "trap"-Befehl und Tastenkombinationen in Bash verwenden, um das SIGTERM-Signal zu erfassen und zu senden. Dieser Beitrag zeigte verschiedene Beispiele, wie man das im Detail erreicht.






