Website-Suche

Linux-Kill-Signalnummern


In diesem Tutorial wird erklärt, was Linux-Kill-Signale sind und wie man sie zum Unterbrechen, Beenden, Anhalten und Fortsetzen von Prozessen verwendet.

Was sind Linux-Kill-Signale?

Kill-Signale ermöglichen die Interaktion zwischen verschiedenen Prozessen. Konkret handelt es sich bei Signalen um Ereignisbenachrichtigungen, die an Prozesse gesendet werden, meist um Prozesse zu unterbrechen, zu beenden, zu beenden oder anzuhalten (aus diesem Grund verwenden wir den Begriff „kill“). Signale können von Prozessen oder vom Kernel gesendet werden. Normalerweise werden sie gesendet, wenn eine Anomalie oder ein außergewöhnlicher Zustand eine spezielle Verarbeitung erfordert oder wenn ein Benutzer einen Prozess manuell unterbricht oder beendet (z. B. durch Drücken von Strg+C).

Wenn ein Signal an einen Prozess gesendet wird, kann dieses Signal oder diese Benachrichtigung eine Standardaktion als Antwort erfüllen oder von einem Signalhandler verarbeitet werden. Ein Signalhandler ist ein benutzerdefinierter Code des Programms, dessen Prozess das Signal empfangen hat, der das Verhalten des Prozesses definiert, wenn das Signal empfangen wird (mit Ausnahme der Signale SIGKILL und SIGSTOP, die nicht verarbeitet, ignoriert oder blockiert werden können).

Wenn das Signal gesendet wird, können folgende Standardaktionen ausgeführt werden:

  • Laufzeit: Der Prozess wird beendet.

  • Ign: Das Signal wird ignoriert, ohne den Prozess zu beeinflussen.

  • Core: Eine Dump-Core-Datei wird erstellt.

  • Stop: Der Prozess wird gestoppt.

  • Fort: Der Prozess wird nach dem Stoppen fortgesetzt.

Abhängig vom Signal können einige dieser Aktionen stattfinden. Das Programm kann auch einen Signalhandler enthalten, um die richtige Aktion auszuführen.

Zusammengefasst: Signale sind an Prozesse übermittelte Nachrichten, die sie darüber informieren, dass ein Ereignis eingetreten ist.

Verfügbare Signale:

Um alle Signalnamen und -nummern auf Ihrem System aufzulisten, können Sie den Befehl kill gefolgt von der Flagge -l verwenden, wie unten gezeigt.

kill -l

Wie Sie sehen, gibt es 64 Signale. Das bekannteste von uns ist wahrscheinlich die Zahl 9 (SIGKILL), mit der Prozesse, einschließlich untergeordneter Prozesse, sofort beendet werden.

  • SIGKILL (9): Das SIGKILL-Signal wird verwendet, um Prozesse sofort abzubrechen oder zu beenden. SIGKILL-Signale können nicht verarbeitet, ignoriert oder gestoppt werden.

  • SIGSTOP (19): Dieses Signal dient dazu, Prozesse zu stoppen oder anzuhalten, die später wieder aufgenommen werden können.

  • SIGCONT (18): Das SIGCONT-Signal wird verwendet, um gestoppte oder pausierte Prozesse fortzusetzen.

So verwenden Sie Kill-Signale:

Die korrekte Syntax zum Senden von Signalen lautet:

kill <-SignalName> <PID>

oder

kill <-SignalNumber> <PID>

Sie können ir durch die Namen oder Nummern ersetzen, die wir zuvor beim Ausführen des Befehls kill -l erhalten haben. Die PID ist die Prozess-ID, die Sie mithilfe des ps-Befehls ermitteln können, wie in den folgenden Anweisungen gezeigt.

Um mit dem praktischen Teil dieses Tutorials zu beginnen, probieren wir SIGSTOP und SIGCONT aus, um einen Prozess anzuhalten und dann fortzusetzen. Für das erste Beispiel habe ich ein kleines Codenamens-Linuxhintsignal erstellt, das kontinuierlich „linux-console.net “ ausgibt “, wie im Screenshot unten gezeigt.

Um ein Signal an den Prozess zu senden, muss ich vorher seine PID lernen. Um die Prozess-ID (PID) anzuzeigen, müssen Sie den Befehl ps ausführen. In meinem Fall bin ich derjenige, der den Prozess ausgeführt hat, daher verwende ich den Befehl ps gefolgt von der Flagge -u, um nur meine Prozesse anzuzeigen.

Hinweis: Weitere Anweisungen zum ps-Befehl finden Sie unter „Verwenden des ps-Befehls unter Linux“.

Wie Sie sehen können, ist die PID des laufenden linux-consolesignal-Skripts 16182.

Der folgende Screenshot zeigt zwei Terminals; Das rechte Terminal zeigt die Übermittlung des SIGSTOP-Signals an Prozess 16182. Das linke Terminal zeigt, wie der Prozess gestoppt wird, wenn ich das Signal sende.

kill -SIGSTOP <PID>

Wie Sie im rechten Terminal sehen können, wurde der Vorgang ordnungsgemäß gestoppt.

Sie müssen das SIGCONT-Signal senden, um die Prozessausführung fortzusetzen, wie in den Screenshots unten gezeigt.

kill -SIGCONT <PID>

Wie Sie sehen, wurde der Vorgang fortgesetzt.

Sie können das gleiche Ergebnis erzielen, indem Sie die Signalnamen durch ihre Nummern ersetzen. Das folgende Beispiel wiederholt das vorherige Szenario, definiert dieses Mal jedoch Signale anhand ihrer Nummern.

Das folgende Beispiel zeigt auch, wie SIGKILL an Prozess 17721 übermittelt wird, um ihn anzuhalten. Dieses Mal gebe ich anstelle des Signalnamens die vom Befehl kill -l zurückgegebene Signalnummer an, in diesem Fall 19 für das SIGSTOP-Signal.

kill -19 <PID>

Der folgende Screenshot zeigt, wie das SIGCONT-Signal angegeben wird, wobei auch seine Nummer anstelle seines Namens verwendet wird.

kill -18 <PID>

Wie Sie sehen, ist das Ergebnis dasselbe, wenn Sie den Signalnamen oder die Signalnummer verwenden.

Wie bereits erwähnt, wird das SIGKILL-Signal verwendet, um einen Prozess vollständig zu beenden; Es ist wahrscheinlich das von Benutzern am häufigsten verwendete Signal.

Wie Sie im folgenden Beispiel sehen können, in dem SIGKILL mit seiner Nummer (9) implementiert ist, wurde das Skript vollständig beendet oder getötet.

kill -9 <PID>

Weitere wichtige Signale:

  • SIGINT: Dieses Signal wird gesendet, wenn der Benutzer die Prozessunterbrechung anfordert (z. B. Strg+C).

  • IGTERM: Das SIGTERM-Signal wird übermittelt, um eine Prozessbeendigung anzufordern, aber nur, um anzufordern und nicht, um zu beenden. Im Gegensatz zu SIGKILL oder SIGSTOP kann dieses Signal behandelt, blockiert oder ignoriert werden.

  • SIGILL: Dieses Signal wird verwendet, um Prozesse als Ursache eines Fehlers wie Betriebs- oder Ausführungsfehlern zu beenden. Dieses Signal kann nicht ignoriert werden.

  • SIGCHLD: Wird verwendet, um übergeordnete Prozesse über Ereignisse untergeordneter Prozesse zu benachrichtigen.

  • SIGHUP: Dieses Signal wird ausgelöst, wenn die Verbindung abrupt unterbrochen wird.

  • SIGPIPE: Dieses Signal wird an Prozesse gesendet, die versuchen, in eine Pipe ohne Leseende zu schreiben oder die nicht gelesen werden kann.

  • SIGQUIT: Dieses Signal ähnelt SIGINT, erzeugt jedoch einen Core-Dump.

Abschluss:

Die Verwendung von Linux-Signalen zum Beenden, Stoppen und Anhalten von Prozessen und anderen Funktionen ist ein Grundwissen, über das jeder Linux-Benutzer verfügen muss. Tiefe Kenntnisse über Signale sind besonders wichtig für Programmierer, die sicherstellen müssen, dass Signalhandler keine unerwünschten Auswirkungen auf das System haben. Wie Sie sehen, gibt es Dutzende verfügbarer Signale; Dieses Tutorial konzentrierte sich nur auf die häufigsten. Weitere Informationen zu Linux-Signalen erhalten Sie unter https://www.gnu.org/software/libc/manual/html_node/Standard-Signals.html.

Vielen Dank, dass Sie den Linux-Hinweis gelesen haben. Folgen Sie uns weiterhin für weitere Linux-Tipps und Tutorials.

Verwandte Artikel: