CodeGym /Kurse /Docker SELF /Prozesse beenden: Befehle `kill`, `killall`, `pkill`

Prozesse beenden: Befehle `kill`, `killall`, `pkill`

Docker SELF
Level 2 , Lektion 5
Verfügbar

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.

  1. Alle laufenden sleep-Prozesse mit dem Befehl ps anzeigen:
ps aux | grep sleep

Du siehst die PID jedes Prozesses.

  1. Beende den Prozess mit der PID, z. B. 1234:
kill 1234
  1. Beende alle sleep-Prozesse auf einmal:
killall sleep
  1. Starte ein paar weitere sleep-Prozesse und beende sie mit pkill:
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.

Kommentare
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION