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
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
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
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.
Suche zuerst nach dem Namen:
pgrep -a PROZESSNAME.Prüfe PIDs, Benutzer und Kommandozeilen in der Ausgabe.
Verwende zunächst das reguläre Signal SIGTERM.
Kontrolliere danach, ob die Prozesse beendet wurden.
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 PROZESSNAMEoderps, 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
killmit 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
sudoverwendest.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
systemctlden 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-ioder gezielteskillanhand 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] PROZESSNAMEspricht Prozesse über ihren Namen an.killverwendet 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 -aundpshelfen, die tatsächlich betroffenen Prozesse vorab zu prüfen.Für Prozesse anderer Benutzer sind häufig Root-Rechte oder
sudonötig.Bei systemd-Diensten ist
systemctl stopmeist 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.