4 Wege einen Prozess zu beenden: kill, pkill, killall, xkill

Es gibt viele Wege, mit denen man einen Prozess in der Linuxkonsole beenden kann. Wer die Unterschiede zwischen den Befehlen kennt, kann zielgerichtet Prozesse beenden, die sich über herkömmliche Weg (über den Schließen-Button) vielleicht nicht beenden lassen. Welche Befehle für welchen Einsatzzweck gedacht sind, möchte ich im Folgenden erläutern.

kill

kill

Der Standardbefehl lautet schlicht kill und sieht z.B. folgendermaßen aus:

$ kill 3130

Um damit einen Prozess zu beenden, ist dessen PID („Process identifier“, eine einzigartige Nummer, die dem Prozess zugeordnet ist) notwendig. Es gibt auch hier etliche Wege, um die PID herauszufinden. Am einfachsten geht das z.B. über den Befehl top, der in der ersten Spalte die PID ausgibt:

$ top
top - 15:50:43 up  4:55,  2 users,  load average: 0,29, 0,46, 0,53
[...]
  PID USER      PR  NI  VIRT  RES  SHR S  %CPU %MEM    TIME+  COMMAND
 1321 root      20   0  183m  49m  11m S   6,3  1,3   5:05.73 Xorg
 2024 benni     20   0 1071m  82m  36m S   6,3  2,2   3:09.70 compiz
 2500 benni     20   0  317m  11m 8604 S   6,3  0,3   0:00.86 gnome-screensav
 3130 benni     20   0 1462m 558m  47m S   6,3 14,6   4:12.20 firefox
 3353 benni     20   0  898m 133m  60m S   6,3  3,5   3:44.68 spotify
    1 root      20   0 24552 2432 1352 S   0,0  0,1   0:00.64 init
    2 root      20   0     0    0    0 S   0,0  0,0   0:00.00 kthreadd
    3 root      20   0     0    0    0 S   0,0  0,0   0:01.32 ksoftirqd/0
[...]

Sind sehr viele Prozesse auf dem PC, kann man konkret nach einem Prozess suchen, indem man folgende Syntax verwendet:

$ pgrep firefox
3130

Weiterhin ist es möglich, dem Prozess gewisse Signale zu senden. Falls ein Prozess nicht reagiert, kann man ihn mit folgendem Befehl „hart“ beenden.

kill -9 3130

Weitere Infos zu den Signalen gibt es unten.

pkill

Um einen Prozess direkt mit dem Namen anzusprechen, benötigt man pkill. Die Syntax ist

pkill [-SIGNAL] -x firefox

Mit -x verhindert man, dass sich andere Befehle angesprochen fühlen, die die Zeichenfolge „firefox“ in sich tragen. Meistens ist das nicht notwendig, aber hin und wieder eben doch.

killall

Mit killall kann man alle Prozesse beenden, die auf einen bestimmten Namen hören. Im Gegensatz zu kill werden hier also mehrere Prozesse beendet und nicht mit ihrer PID angesprochen, sondern mit ihrem Namen.

killall firefox

Wird kein Signal explizt angegeben, sendet killall ein SIGTERM, also einen „weichen“ Befehl.

Häufig ist es sinnvoll, mit der Tabulator-Taste den richtigen Befehlnamen vervollständigen zu lassen. Hierdurch vermeidet man Tippfehler und stellt fest, ob dieser Prozessname überhaupt existiert.

killall fire[TAB]

xkill

Die Variante für alle, die sich gar nicht erst mit top oder ps herumärgern wollen, lautet xkill. Führt man es aus (entweder im Terminal oder über Alt + F2)

xkill

verwandelt sich der Mauszeiger in einen Totenkopf (bzw. ein Kreuz). Mit einem Mausklick auf das Programmfenster, wird dieses abgeschossen. Ich bin von diesem Befehl nicht überzeugt, da man damit aus Versehen auch ganz andere Programm abschießen kann. Es ist gerade für Einsteiger besonders „anschaulich“.

In Wirklichkeit leitet xkill den Wunsch auf beenden des Prozesses an den XServer weiter, der den Rest übernimmt.

Signale

Da ich in den vorherigen Abschnitten häufiger davon gesprochen habe, gibt es hier eine Übersicht über Signale, die verwendet werden können.

Nr. Name Aktion Bemerkung
1 SIGHUP Ende Trennen der Terminalverbindung, siehe auch Terminal schließen.
2 SIGINT Ende Unterbrechen der Terminalverbindung, siehe auch Strg+C.
3 SIGQUIT Dump & Ende Unterbrechen der Terminalverbindung und debuggen.
9 SIGKILL Dump & Ende Senden Abbruch und debuggen durch den Kernel, siehe auch Wichtig.
10 SIGUSR1 Intern Frei zur eigenen Benutzung, sofern in den Programmen integriert, siehe auch Fortschritt von dd abfragen.
12 SIGUSR2 Intern Frei zur eigenen Benutzung, sofern in den Programmen integriert.
15 SIGTERM Ende Standard bei allen kill-Programmen: Abschließen und beenden des Programms.
18 SIGCONT Restart Ein mit -SIGSTOP (19) angehaltener Prozess soll weiterlaufen, siehe auch bg %jobnummer.
19 SIGSTOP Anhalten Der Prozess wird pausiert und kann mit -SIGCONT (18) wieder gestartet werden.

Quelle: http://wiki.ubuntuusers.de/Signale, Links teilweise entfernt

Weiterführende Links

Bildquelle: vizzzual-dot-com/flickr

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.