VMware ESXi and vSphere Cluster Management

Prozesse unter Linux mit killall beenden

Lerne, wie du Linux-Prozesse mit killall anhand ihres Namens beendest, Signale auswählst, Treffer prüfst und typische Fehler sicher behandelst.

killall sendet Signale an laufende Prozesse. Der Befehl wird häufig verwendet, um Prozesse anhand ihres Namens zu beenden, statt jede einzelne Prozess-ID, kurz PID, anzugeben.

Das ist praktisch, kann aber mehrere gleichnamige Prozesse gleichzeitig betreffen. Prüfe deshalb vor dem Aufruf, welche Prozesse tatsächlich gefunden werden.

Was ist ein Prozess und was macht killall?

Ein Prozess ist eine laufende Instanz eines Programms. Das Betriebssystem identifiziert jeden Prozess mit einer eindeutigen PID. Ein Signal ist eine Nachricht des Betriebssystems an einen Prozess, beispielsweise mit der Aufforderung, sich zu beenden.

Während kill üblicherweise eine PID erhält, verwendet killall einen oder mehrere Prozessnamen:

killall [Optionen] PROZESSNAME

Passt ein Name zu mehreren laufenden Prozessen, kann killall allen passenden Prozessen das angegebene Signal senden.

killall und kill im Vergleich

Merkmal | killall | kill

Zielangabe | Prozessname | Meist PID

Anzahl betroffener Prozesse | Alle passenden Prozesse können betroffen sein | Normalerweise genau der Prozess mit der angegebenen PID

Typische Verwendung | Mehrere gleichnamige Instanzen gemeinsam ansprechen | Einen bestimmten Prozess gezielt steuern

Hauptrisiko | Ein zu allgemeiner Name beendet unerwartet mehrere Prozesse | Eine falsche PID betrifft den falschen einzelnen Prozess

Für einen einzelnen, eindeutig bekannten Prozess ist kill mit PID oft die sicherere Wahl. Bei mehreren gleichnamigen Instanzen ist killall bequemer, sollte aber nur nach einer Prüfung verwendet werden.

Prozesse vor dem Beenden prüfen

Mit pgrep kannst du passende PIDs und die zugehörigen Kommandozeilen anzeigen:

pgrep -a dd

Die Ausgabe hilft zu erkennen, ob der erwartete Prozess läuft und ob mehrere Treffer existieren. Eine alternative Suche liefert zusätzliche Informationen wie Benutzer und Startbefehl:

ps -ef | grep '[P]ROZESSNAME'

Der Prozessname, den killall vergleicht, ist nicht immer identisch mit dem sichtbaren Kommandozeilenaufruf oder dem vollständigen Programmpfad. Ein Programm kann beispielsweise mit einem langen Pfad gestartet werden, aber einen kürzeren Namen als Prozessnamen führen. Prüfe bei Unsicherheit die lokale Dokumentation mit man killall.

Grundlegende Verwendung

Der einfachste Aufruf sendet das Standardsignal an passende Prozesse:

killall dd

In diesem Beispiel wird der Prozessname dd verwendet. Der Name ist nur ein Beispiel; setze an dieser Stelle den tatsächlich geprüften Prozessnamen ein. Der Prozessname ersetzt die vorherige Ermittlung und Angabe einzelner PIDs, nicht jedoch die Verantwortung, die Treffer vorher zu kontrollieren.

Mehrere Namen können je nach installierter killall-Variante angegeben werden:

killall name1 name2

Prüfe die lokale Handbuchseite, wenn du mehrere Namen oder spezielle Namensvergleichsregeln verwendest.

Reguläres Beenden mit SIGTERM

Unter Linux sendet killall standardmäßig normalerweise SIGTERM. Dieses reguläre Beendigungssignal gibt dem Prozess die Gelegenheit, geordnet zu stoppen, Dateien zu schließen, temporäre Daten aufzuräumen und seinen Zustand zu speichern.

Du kannst das Signal ausdrücklich angeben:

killall -s TERM dd

Die Schreibweise mit einem vorangestellten Bindestrich ist ebenfalls üblich:

killall -TERM dd

Signal | Nummer | Wirkung | Typischer Einsatz

SIGTERM | 15 | Reguläre Aufforderung zum Beenden | Standard für einen geordneten Prozessstopp

SIGKILL | 9 | Sofortiges, nicht abfangbares Beenden | Letzte Maßnahme bei einem nicht reagierenden Prozess

SIGHUP | 1 | Häufig erneutes Einlesen der Konfiguration oder Beenden, abhängig vom Programm | Dienste zur Konfigurationsaktualisierung auffordern

SIGINT | 2 | Unterbrechung, ähnlich der Tastenkombination Ctrl+C | Vordergrundprozesse unterbrechen

Erzwungenes Beenden mit SIGKILL

SIGKILL ist das Signal 9. Es kann vom Prozess nicht abgefangen, blockiert oder ignoriert werden und beendet ihn unmittelbar:

killall -s 9 dd
killall -KILL dd

Verwende SIGKILL nur, wenn ein reguläres Beenden mit SIGTERM nicht funktioniert. Der Prozess kann dann keine Aufräumarbeiten mehr ausführen. Mögliche Folgen sind nicht gespeicherte Daten, unvollständige Bereinigungen oder inkonsistente temporäre Dateien. Bei Schreibvorgängen kann außerdem ein Datenverlust entstehen.

Wichtige Optionen von killall

Option | Zweck | Beispiel

-s SIGNAL | Signal ausdrücklich nach Name oder Nummer auswählen | killall -s TERM dd

-SIGNAL | Kurzform zur Auswahl eines Signals | killall -KILL dd

-i | Vor jedem Treffer interaktiv nachfragen | killall -i dd

-v | Ausführliche Rückmeldung ausgeben | killall -v dd

-w | Warten, bis die Prozesse beendet sind, sofern unterstützt | killall -w dd

-e | Exakte Namensübereinstimmung verlangen, sofern unterstützt | killall -e langerprozessname

-l | Verfügbare Signalnamen anzeigen, sofern unterstützt | killall -l

Die Optionen sind nicht bei jeder Implementierung identisch. Besonders -w, -e und -l solltest du mit man killall auf deinem System prüfen.

Mehrere Treffer sicher behandeln

killall arbeitet nach Namen, nicht nach deiner Absicht. Wenn drei Prozesse denselben Namen tragen, können alle drei das Signal erhalten. Ein allgemein gewählter Name kann deshalb mehr Prozesse treffen als erwartet.

  1. Suche zuerst nach dem Namen: pgrep -a PROZESSNAME.

  2. Prüfe PIDs, Benutzer und Kommandozeilen in der Ausgabe.

  3. Verwende zunächst das reguläre Signal SIGTERM.

  4. Kontrolliere danach, ob die Prozesse beendet wurden.

  5. Nutze SIGKILL nur nach einer bewussten Abwägung.

Die interaktive Option verlangt eine Bestätigung für jeden Treffer:

killall -i dd

Wenn nur ein einzelner Prozess beendet werden soll, ermittle seine PID und verwende gezielt kill PID:

kill PID

Berechtigungen und Systemdienste

Eigene Prozesse darfst du in der Regel ohne erhöhte Rechte signalisieren. Für Prozesse anderer Benutzer oder privilegierte Systemprozesse sind häufig Root-Rechte erforderlich:

sudo killall PROZESSNAME

Verwende sudo nur, wenn es sachlich erforderlich ist. Beende nicht wahllos kritische Systemprozesse oder Namen, die von vielen Komponenten verwendet werden.

Wird ein Prozess durch systemd verwaltet, ist die Dienstverwaltung meist die passendere Lösung. Ein geordneter Dienststopp sieht beispielsweise so aus:

sudo systemctl stop beispiel.service

Der Dienstmanager kann Abhängigkeiten, Aufräumarbeiten und ein automatisches Neustarten korrekt berücksichtigen. killall beendet dagegen Prozesse direkt und informiert die Dienstverwaltung nicht auf dieselbe Weise.

Kein Treffer, Exit-Status und Fehlermeldungen

Wenn kein Prozess mit dem angegebenen Namen läuft, meldet killall typischerweise, dass kein passender Prozess gefunden wurde, und liefert einen von null verschiedenen Exit-Status. Das ist besonders für Shell-Skripte wichtig: Der Rückgabestatus kann anzeigen, ob ein Prozess gefunden und signalisiert wurde.

killall PROZESSNAME
status=$?
printf 'Exit-Status: %s\n' "$status"

Ein Nichttreffer bedeutet nicht automatisch, dass der Befehl fehlerhaft ist. Der Prozess kann bereits beendet sein, der Name kann falsch sein oder der sichtbare Startbefehl kann vom verglichenen Prozessnamen abweichen.

Typische Probleme und Lösungen

Kein Prozess gefunden

  • Prüfe mit pgrep -a PROZESSNAME oder ps, ob der Prozess überhaupt läuft.

  • Vergleiche den tatsächlichen Prozessnamen mit dem Namen im killall-Aufruf.

  • Prüfe mit man killall, wie deine lokale Variante Namen vergleicht.

  • Verwende bei Bedarf kill mit einer zuvor ermittelten PID.

Operation not permitted

  • Der Prozess gehört möglicherweise einem anderen Benutzer oder ist privilegiert.

  • Prüfe Besitzer und Berechtigungen, bevor du gezielt sudo verwendest.

  • Handelt es sich um einen Dienst, nutze möglichst sudo systemctl stop DIENSTNAME.service.

Der Prozess läuft weiter

  • Der Prozess verarbeitet SIGTERM möglicherweise noch. Warte kurz und prüfe erneut mit pgrep.

  • Ein Supervisor oder Dienstmanager kann den Prozess automatisch neu starten. Kontrolliere mit systemctl den Dienststatus und das Neustartverhalten.

  • Ein Prozess in einem nicht unterbrechbaren Kernel-Wartezustand reagiert möglicherweise auch nicht sofort. Untersuche dann die zugrunde liegenden Ein-/Ausgabe- oder Systemprobleme.

  • Erwäge SIGKILL erst als letzte Maßnahme und nur mit Bewusstsein für mögliche Datenverluste.

Unerwartet viele Prozesse beendet

  • Mehrere Instanzen hatten denselben Namen.

  • Der verwendete Name war zu allgemein.

  • Nutze vor dem nächsten Eingriff pgrep -a, die Bestätigung mit -i oder gezieltes kill anhand einer PID.

Plattform- und Implementierungsunterschiede

Auf vielen Linux-Distributionen stammt killall aus dem Paket psmisc. Der gleichnamige Befehl auf einem anderen Unix-System kann jedoch eine andere Semantik oder andere Optionen besitzen. Verlasse dich daher nicht allein auf Beispiele aus einer fremden Umgebung.

man killall

Die lokale Handbuchseite beschreibt die installierte Variante, ihre Namensvergleichsregeln, verfügbaren Signale, Optionen und Exit-Status.

Sicherer Ablauf in der Praxis

# 1. Passende Prozesse anzeigen
pgrep -a PROZESSNAME

# 2. Regulär beenden
killall -s TERM PROZESSNAME

# 3. Ergebnis kontrollieren
pgrep -a PROZESSNAME

# 4. Nur wenn erforderlich und nach Abwägung erzwingen
killall -s 9 PROZESSNAME

Prüfungsrelevante Zusammenfassung

  • killall [Optionen] PROZESSNAME spricht Prozesse über ihren Namen an.

  • kill verwendet typischerweise eine PID und eignet sich besser für einen einzelnen, gezielt ausgewählten Prozess.

  • Das Standardsignal von killall ist unter Linux üblicherweise SIGTERM, das einen geordneten Abbruch ermöglicht.

  • SIGKILL beziehungsweise Signal 9 beendet sofort und ist nicht abfangbar; es kann Datenverlust und unvollständige Aufräumarbeiten verursachen.

  • pgrep -a und ps helfen, die tatsächlich betroffenen Prozesse vorab zu prüfen.

  • Für Prozesse anderer Benutzer sind häufig Root-Rechte oder sudo nötig.

  • Bei systemd-Diensten ist systemctl stop meist angemessener als killall.

  • Optionen und Verhalten können sich unterscheiden; prüfe deshalb man killall.

Eine thematisch passende Ergänzung ist das gezielte Beenden von Prozessen mit killall.