Linux-Terminal-Basics 10: Programme (zwangs)beenden
Irgendwann ist Schluss mit lustig - wir machen Euch zu Killern und Terminatoren!
Wow, beenden von Programmen. Geht es noch langweiliger? Vermutlich nicht. Aber immerhin deuten die Kommandos auf Action hin, killen und terminieren mit kill ist angesagt. Aber da sich das standardmäßig eher nach Verwaltungsarbeit anfühlt, gibt es in dieser Ausgabe ausnahmsweise auch mal eine grafische Oberfläche. Nun, eine textbasierte Oberfläche, aber immerhin.
In unserer Serie zu Linux-Terminal-Basics zeigen wir Euch, wie Ihr einige der wichtigsten Aufgaben auf der Kommandozeile erledigen könnt - vom Navigieren, über Dateioperationen, bis hin zu komplexen Suchaufträgen. Als Terminal verwenden wir Bash und auch wenn Linux im Vordergrund steht, funktioniert fast alles auch unter Windows. Und nun noch die Links zur Einleitung und zur Übersicht aller Artikel.
Manuelle kill-Lösung
Zunächst die native und eher komplizierte Variante. Um ein Programm, genauer gesagt natürlich einen Prozess, zu beenden, müsst Ihr diesen zunächst mal finden und dann mit dem Tool kill beenden. Das Finden läuft über den nicht wirklich handlichen Prozessmanager ps:
ps -A
Über -A werden alle Prozesse aufgelistet - und das sind mitunter ziemlich viele. Also wollt Ihr filtern:
ps -C cron,gimp,firefox
Über -C könnt Ihr einfach Programme übergeben. Und wenn Ihr mehr Informationen haben wollt:
px -FC firefox
Mit -F werden dann auch die ganzen Programmpfade sichtbar. In allen Fällen braucht Ihr die pid, also die Prozess-ID:
22:49:24 ~ $ ps -FC apache2
UID PID PPID C SZ RSS PSR STIME TTY TIME CMD
mysite_+ 1330976 2076910 0 3707 2352 3 20:30 ? 00:00:00 /usr/sbin/apache2 -f /omd/sites/mysite_22/etc/apache/apache.conf
Wichtig ist hier also 1330976.
Zum Beenden des Prozesses 1330976 braucht Ihr nun das Programm kill:
kill -n 15 1330976
oder
kill -s SIGTERM 1330976
Kill killt an sich nicht, sondern sendet ein Signal an einen Prozess. Standardmäßig wird ein Prozess freundlich beendet, sprich terminiert - über das Signal SIGTERM, das sich auch über die Nummer 15 senden lässt. Freundlich beenden heißt, dass das Programm quasi gebeten wird zu stoppen - was das Programm ignorieren kann.
Wollt Ihr einen Prozess zwangsbeenden, geht das mit dem SIGKILL-Signal:
kill -n 9 1330976
oder
kill -s SIGKILL 1330976
Hier killt kill nun also doch. Das Tool mit dem martialischen Namen kann aber noch viel mehr, schaut Euch einfach mal die ganzen möglichen Signale mit
kill -l
an - es sind stolze 64 Einträge! Wie gesagt, das ist der manuelle, klassische, komplizierte Weg. Man kann das alles noch ein wenig vereinfachen, wenn man die Tools pgrep und pkill verwendet, quasi auf Prozesse spezialisierte Varianten von kill und dem Suchprogramm grep. Oder Ihr macht es Euch direkt richtig einfach.
Bequeme kill-Lösung mit htop
Standardmäßig wird Euch bei fast allen Distributionen der simple Prozessmanager top zur Verfügung stehen. Es empfiehlt sich aber eigentlich immer, das deutlich hübschere und einfachere htop zu installieren:
sudo apt install htop
In der Praxis sieht das Tool dann so aus:
Das Beenden von Prozessen funktioniert dann analog zum obigen Prozedere - erst mal suchen: Drückt F4 und gebt einen Suchbegriff ein:
Wählt dann mit den Pfeiltasten den gewünschten Prozess, drückt F9 für den kill-Modus und wählt dann das passende kill-Signal:
Zumindest für den Anfang ist htop sicherlich die bessere Lösung. Falls Ihr es aber doch manuell erledigen wollt und Euch nicht an die Syntax erinnern könnt: Fragt unsere hauseigene Linux-Hilfe cli.help:
curl cli.help/kill
Bonus: Prozesse pausieren
Kill kann Prozesse übrigens auch stoppen und fortführen, also pausieren - abermals über Signale:
kill -s SIGSTOP 1330976
kill -s SIGCONT 1330976
Nützlich ist das zum Beispiel, wenn Ihr den Terminal-Basics mal entwachsen seid und mit Skripten herumspielt.