Prozesse beenden: Befehle kill
, killall
, pkill
1. Prozesse beenden
Heute gehen wir einen Schritt weiter und lernen Befehle kennen, mit denen sich Prozesse effizient beenden lassen. Mach dich bereit, denn das Ende für „eingefrorene“ Programme ist nah!
Jede gestartete Anwendung oder jeder Befehl in Linux ist ein Prozess. Aber was tun, wenn ein Programm hängt, 100 % der CPU-Ressourcen frisst oder einfach nicht mehr richtig funktioniert? Die Aufgabe eines Administrators (oder Entwicklers) ist es, einzugreifen und den „rebellischen“ Prozess zu beenden. Unter Linux gibt es dafür eine ganze Reihe von Tools: kill
, killall
und pkill
. Keine Sorge, trotz der martialischen Namen sind wir nicht hier, um alles zu zerstören. Vielmehr ist es eine elegante Möglichkeit, Ordnung zu schaffen.
2. Der kill
-Befehl
Grundlagen
Der Befehl kill
beendet einen Prozess anhand seiner Prozess-ID (PID). Die PID ist eine eindeutige Nummer, die das System jedem Prozess zuweist. Zum Beispiel, wenn du den Prozess mit der PID 1234 beenden möchtest, verwendest du den folgenden Befehl:
kill 1234
Linux ist von Natur aus recht liberal, deshalb sendet der Befehl kill
dem Prozess keinen Befehl „zu sterben“, sondern nur eine Anfrage zum Beenden. Diese Anfrage nennt man "Signal". Standardmäßig sendet kill
das Signal SIGTERM
(15).
Was ist ein Signal?
Linux verwendet Signale, um mit Prozessen zu kommunizieren. Es ist wie das Versenden von Postkarten mit unterschiedlichen Absichten:
SIGTERM
(15): "Bitte beende dich". Das ist eine höfliche Anfrage, den Prozess zu beenden.SIGKILL
(9): "Genug jetzt, du bist gefeuert!" Das zwangsweise Beenden eines Prozesses.SIGHUP
(1): "Hey, lade die Konfiguration neu". Wird verwendet, um einige Prozesse neu zu starten, ohne sie zu stoppen.
Beispiel für ein erzwungenes Beenden eines Prozesses:
kill -9 1234
Wenn sich der Prozess weigert, sich mit SIGTERM
zu beenden, kannst du ein stärkeres Signal senden – SIGKILL
.
Wie finde ich die PID eines Prozesses heraus?
Um den Befehl kill
zu verwenden, musst du die PID des Prozesses kennen. Hier helfen dir bekannte Befehle wie ps
, top
oder htop
. Zum Beispiel zeigt dir die Ausgabe des Befehls ps aux
alle laufenden Prozesse an:
ps aux | grep firefox
Dieser Befehl findet den Firefox-Prozess und zeigt dessen PID an.
Der Prozess ist beendet, du kannst aufatmen. Aber was tun, wenn es mehrere „hängende“ Prozesse gibt? Hier kommen die Befehle killall
und pkill
ins Spiel.
3. Der Befehl killall
Praktisch für die Massenbeendigung
Der Befehl killall
erlaubt es, alle Prozesse mit einem bestimmten Namen zu beenden. Du brauchst die PID nicht manuell suchen, es geht viel einfacher. Zum Beispiel, wenn du alle gestarteten Instanzen von Firefox schließen möchtest:
killall firefox
Wie der Befehl kill
sendet auch killall
Signale an die Prozesse. Du kannst ein spezifisches Signal angeben:
killall -9 firefox
Nützlicher Tipp
Sei vorsichtig mit Befehlen wie killall
. Wenn du versehentlich einen zu allgemeinen Prozess angibst, zum Beispiel killall python
, kannst du alle gestarteten Python-Anwendungen gleichzeitig beenden, einschließlich serverseitiger Aufgaben oder wichtiger Skripte.
Welche Signale werden unterstützt?
Für alle Befehle kill
, killall
und pkill
kannst du die Liste der verfügbaren Signale mit folgendem Befehl anzeigen:
kill -l
4. Kommando pkill
Prozesse nach Namen (oder Teilen davon) suchen
Das Kommando pkill
funktioniert ähnlich wie killall
, ist jedoch flexibler. Es erlaubt, Prozesse zu beenden, die einem bestimmten Muster entsprechen. Zum Beispiel:
pkill fire
Das Kommando beendet alle Prozesse, die das Wort "fire" im Namen enthalten. Das ist praktisch für Fälle, in denen der Prozessname lang ist oder dir nur ein Teil davon bekannt ist.
Prozesse von Nutzern beenden
Du kannst die Prozesse beenden, die einem bestimmten Nutzer gehören. Zum Beispiel:
pkill -u username
Das wird alle Prozesse beenden, die dem Nutzer username
gehören.
Vergleich von kill
, killall
und pkill
Kommando | Besonderheiten |
---|---|
kill |
Beendet einen Prozess anhand der PID. Arbeit punktuell. |
killall |
Beendet alle Prozesse mit einem angegebenen Namen. Praktisch für Massenabschaltungen. |
pkill |
Beendet Prozesse nach Namen oder Muster. Unterstützt zusätzliche Parameter wie den Nutzernamen. |
5. Praxis: Prozesse beenden
Lass uns alles, was wir gelernt haben, in die Tat umsetzen. Zuerst starten wir ein paar langlaufende Prozesse:
sleep 300 &
sleep 400 &
sleep 500 &
Diese Befehle erstellen drei Hintergrundprozesse mit unterschiedlichen Wartezeiten. Jetzt kannst du mit den Befehlen kill
, killall
und pkill
arbeiten.
- Alle laufenden
sleep
-Prozesse mit dem Befehlps
anzeigen:
ps aux | grep sleep
Du siehst die PID jedes Prozesses.
- Beende den Prozess mit der PID, z. B. 1234:
kill 1234
- Beende alle
sleep
-Prozesse auf einmal:
killall sleep
- Starte ein paar weitere
sleep
-Prozesse und beende sie mitpkill
:
pkill sl
6. Typische Fehler und wichtige Feinheiten
Falls du versuchst, einen Prozess zu beenden, für den du keine Rechte hast (z. B. einen Prozess eines anderen Benutzers), gibt der Befehl einen Fehler aus. Dafür musst du Superuser-Rechte (sudo) besitzen. Zum Beispiel:
sudo kill 1234
Eine weitere Quelle der Verwirrung kann die Verwendung von zu aggressiven Signalen wie -9
sein. Das ist vergleichbar mit dem Herausziehen des Netzsteckers: Das System hat keine Zeit, Ressourcen freizugeben oder Daten zu speichern. Verwende SIGKILL
nur im äußersten Notfall.
Sei vorsichtig mit killall
und pkill
, besonders wenn du einen Server verwaltest. Prozesse "blind" zu beenden, kann zum Verlust wichtiger Daten führen.
Warum ist es wichtig, Befehle zum Beenden von Prozessen zu kennen?
Diese Befehle haben ein breites Anwendungsspektrum, von der Beendigung eingefrorener Anwendungen bis zur Verwaltung von Serverprozessen. Bei Vorstellungsgesprächen kann das Wissen über kill
und pkill
ein wichtiger Indikator für deine Kompetenz sein, besonders wenn es um Systemadministration oder Backend-Arbeit geht.
Nutze dieses Wissen, um Skripte zu erstellen, die unkontrollierte Prozesse automatisch beenden oder belegte Ports freigeben. Zum Beispiel, bevor du einen Server startest, der den Port 8080 belegt, kannst du Folgendes verwenden:
pkill -f "port 8080"
Die Flexibilität und Power dieser Befehle machen sie zu unverzichtbaren Werkzeugen für jeden Linux-Spezialisten.
GO TO FULL VERSION