GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Killall-Befehl in Linux mit Beispielen

Die Linux-Befehlszeile bietet verschiedene Befehle zum Beenden eines Prozesses. Beispielsweise kann der Befehl „kill“ verwendet werden, um einen Prozess zu beenden, indem seine PID als Argument übergeben wird, der Befehl „pkill“ nimmt ein Muster als Eingabe und alle passenden laufenden Prozesse werden beendet. Aber es gibt einen Befehl 'killall', der standardmäßig genau mit dem Argumentnamen übereinstimmt und den passenden Prozess beendet.

In diesem Artikel werden wir diesen Befehl anhand einiger praktischer Beispiele besprechen. Der Befehl killall kann verwendet werden, um ein Signal an einen bestimmten Prozess zu senden, indem sein Name verwendet wird. Das heißt, wenn Sie fünf Versionen desselben Programms laufen haben, wird der Befehl killall alle fünf beenden.

Das Signal kann als Argument für diesen Befehl oder SIGTERM angegeben werden wird standardmäßig gesendet. Ein Prozess kann untergeordnete Prozesse erzeugen, die unabhängig vom übergeordneten Prozess sind, was bedeutet, dass jeder Unterprozess durch seine PID identifiziert wird. Mit dem Befehl kill verwenden wir die PID, um den zu beendenden Unterprozess auszuwählen, aber mit dem Befehl killall werden alle Prozesse beendet, indem wir den Namen angeben, da alle Unterprozesse und der übergeordnete Prozess denselben Namen haben.

Lassen Sie uns die Verwendung des Killall-Befehls anhand einiger praktischer Beispiele diskutieren.

1) Alle unterstützten Signale auflisten

Der Kill-Befehl unterstützt einige Signale, die mit -l aufgelistet werden können Möglichkeit. killall sendet Signale an Prozesse. Sie können das -s verwenden Option (gefolgt vom Signalnamen), um ein bestimmtes Signal an einen Prozess zu senden.

$ killall -l
 HUP INT QUIT ILL TRAP ABRT IOT BUS FPE KILL USR1 SEGV USR2 PIPE ALRM TERM
 STKFLT CHLD CONT STOP TSTP TTIN TTOU URG XCPU XFSZ VTALRM PROF WINCH IO PWR SYS
 UNUSED

Standardmäßig SIGTERM/TERM (15) wird an den Prozess gesendet, wenn kein Signal an den Killall-Befehl gegeben wird. Die obigen Signale werden sowohl von Benutzern als auch von Systemadministratoren sinnvoll verwendet. killall unterstützt also all diese Signale.

2) Einen bestimmten Prozess beenden

Um einen Prozess zu beenden, müssen wir ihn identifizieren, um zu prüfen, ob er läuft. Wir können einen bestimmten Prozess anhand seines Namens beenden. Angenommen, es gibt zwei Prozesse, die dieselben Anfangsbuchstaben haben:

$ ps -aef | grep "test"
 himanshu 3969 2811 0 14:14 pts/0 00:00:00 ./test
 himanshu 3970 2811 0 14:14 pts/0 00:00:00 ./test_again

Nun, hier ist, wie Sie den Befehl killall verwenden können, um 'test_again' zu beenden:

$ killall test_again
 [2]+ Terminated ./test_again

Wie Sie sehen können, hat der killall-Befehl den „test_again“-Prozess beendet. Dies kann auch durch den Befehl ps bestätigt werden :

$ ps -aef | grep "test"
 himanshu 3969 2811 0 14:14 pts/0 00:00:00 ./test

Beachten Sie, dass 'test_again' nicht in der Ausgabe angezeigt wird, da es beendet wird.

3) Beenden Sie einen Prozess, der die Groß-/Kleinschreibung ignoriert

Beim Befehl killall wird standardmäßig zwischen Groß- und Kleinschreibung unterschieden. Hier ist ein Beispiel:

$ ps -aef | grep "test"
 himanshu 4177 3161 0 14:54 pts/3 00:00:00 ./test
 himanshu 4178 3161 0 14:54 pts/3 00:00:00 ./test_again
 himanshu 4180 3161 0 14:54 pts/3 00:00:00 grep --color=auto test

Sie können sehen, dass alle unsere Prozesse in Kleinbuchstaben geschrieben sind. Lassen Sie uns versuchen, den "./test"-Prozess zu beenden, aber wir geben den Namen in Großbuchstaben

ein
$ killall TEST
 TEST: no process found

Sie können also sehen, dass der killall-Befehl keinen Prozess namens TEST finden konnte, während ein Prozess namens „test“ bereits läuft. Um sicherzustellen, dass der Befehl killall die Groß-/Kleinschreibung ignoriert, verwenden Sie das -I Möglichkeit. Hier ist ein Beispiel:

$ killall -I TEST
 [1]- Terminated ./test

Beachten Sie, dass der 'Test'-Prozess jetzt erfolgreich beendet wurde.

4) Prozesse mit Bestätigung beenden

Der Befehl killall kann verwendet werden, um mehr als einen Prozess zu beenden.

$ killall test test_again
 [2]- Terminated ./test_again
 [3]+ Terminated ./test

Es kann jedoch vorkommen, dass beim Einfügen des Prozessnamens ein Fehler gemacht wird, indem ein anderer Name angegeben wird. Es kann ein ernsthaftes Problem sein, wenn der angezeigte Prozess ein kritischer Prozess für das System ist. Es wird daher empfohlen, killall zu verwenden, um Prozesse interaktiv zu beenden, indem Sie nach einer Bestätigung fragen. Dazu können Sie das -i verwenden Option.

$ killall -i test test_again
 Kill test(4201) ? (y/N) y
 Kill test_again(4202) ? (y/N) y
 [1]- Terminated ./test
 [2]+ Terminated ./test_again

Sie können also sehen, dass der Benutzer auf diese Weise die Beendigung von Prozessen mit dem Befehl killall steuern kann.

5) Prozess leise beenden

Manchmal, wenn killall einen bestimmten Prozess nicht finden kann, beschwert es sich in der Ausgabe darüber.

Hier ist ein Beispiel:

$ killall TEST
 TEST: no process found

Aber falls Sie möchten, dass killall seine Arbeit leise erledigt, können Sie das -q verwenden Möglichkeit:

$ killall -q TEST
$

Sie können also sehen, dass bei Verwendung von -q die Ausgabe unterdrückt wurde.

6) Ein seltsames Ergebnis des Killall-Befehls

Die Manpage des Befehls killall besagt, dass er standardmäßig nur dann mit vollständigen Namen übereinstimmt, wenn sie weniger als oder gleich 15 Zeichen lang sind. Wenn also ein Befehlsname länger als 15 Zeichen ist, ist der vollständige Name möglicherweise nicht verfügbar (d. h. er wird ausgetauscht). In diesem Fall killall tötet alles, was innerhalb der ersten 15 Zeichen passt.

Angenommen, es gibt die folgenden zwei Prozesse mit langen Namen:

$ ps -aef | grep "test"
 himanshu 4021 3161 0 14:27 pts/3 00:00:00 ./test_abcdefghij
 himanshu 4035 3161 0 14:27 pts/3 00:00:00 ./test_abcdefgh

Der erste Prozess in der obigen Ausgabe hat genau 15 Zeichen im Namen. Versuchen wir es mit dem Befehl killall zu beenden :

$ killall test_abcdefghij
 [1]- Terminated ./test_abcdefghij

Sie können also sehen, dass der Befehl killall den Prozess erfolgreich beendet.

Nun, laut Manpage, wenn beide Namen mehr als 15 übereinstimmende Zeichen gehabt hätten, hätte killall Prozesse beendet, bei denen auf den Namen -e folgt Option oder es wird alles töten, was innerhalb der ersten 15 Zeichen passt. Hier ist ein Beispiel:

$ ps -aef | grep "test"
 himanshu 4114 3161 0 14:40 pts/3 00:00:00 ./test_abcdefghijklmnopqrstuvwx
 himanshu 4141 3161 0 14:46 pts/3 00:00:00 ./test_abcdefghijklmnopqrstuvwxyz
 himanshu 4143 3161 0 14:46 pts/3 00:00:00 grep --color=auto test

Beachten Sie, dass beide Prozesse jetzt mehr als 15 übereinstimmende Zeichen in ihrem Namen haben. Als ich nun versuchte, den zweiten Prozess mit killall zu beenden:

$ killall test_abcdefghijklmnopqrstuvwxyz
 [6]+ Terminated ./test_abcdefghijklmnopqrstuvwxyz

Es hat nur den angegebenen Prozess beendet und nicht auch den zweiten Prozess

$ ps -aef | grep "test"
 himanshu 4114 3161 0 14:40 pts/3 00:00:00 ./test_abcdefghijklmnopqrstuvwx
 himanshu 4146 3161 0 14:47 pts/3 00:00:00 grep --color=auto test

Ich bin mir nicht sicher, ob auf meiner Seite etwas nicht stimmt oder ob es sich um einen Fehler im Killall-Befehl handelt. Ich würde mich freuen, wenn Sie Ihre Meinung dazu in Kommentaren darlegen.

Übrigens, hier sind die Details des killall-Befehls auf meinem System:

$ killall --version
killall (PSmisc) 22.20
Copyright (C) 1993-2012 Werner Almesberger and Craig Small

PSmisc comes with ABSOLUTELY NO WARRANTY.
This is free software, and you are welcome to redistribute it under
the terms of the GNU General Public License.
For more information about these matters, see the files named COPYING.

Schlussfolgerung

Ab Centos 7 wird empfohlen, pkill anstelle von killall auszuführen, sodass Sie möglicherweise standardmäßig den Fehler „killall:command not found“ erhalten, wenn Sie den Befehl ausführen. Wenn Sie es immer noch möchten, installieren Sie pkill, indem Sie das psmisc-Paket hinzufügen (# yum install psmisch).

Killall ist hilfreich, weil wir einen Prozess anhand seines Namens beenden können, selbst wenn wir uns nicht an seine PID erinnern können. Es hat einige Optionen nicht, weil es relativ einfach zu bedienen ist.

Lesen Sie auch:

  • Wie man einen Prozess vom Linux-Terminal beendet
  • fkill - Interaktives Tool zum Beenden von Prozessen unter Linux

Linux
  1. wc Linux-Befehl mit Beispielen

  2. Linux Tee-Befehl mit Beispielen

  3. Linux-Kopfbefehl mit Beispielen

  4. JQ-Befehl in Linux mit Beispielen

  5. killall-Befehlsbeispiele in Linux

15 Linux-PS-Befehl mit Beispielen

Linux-CD-Befehl mit Beispielen

Linux-Uhrbefehl mit Beispielen

Wartebefehl in Linux mit Beispielen

Wait-Befehl in Linux anhand von Beispielen erklärt

Linux-IP-Befehl mit Beispielen