Linux Deutsch

Prozesse unter Linux mit killall beenden

Lerne, wie du Linux-Prozesse anhand ihres Namens mit killall beendest, Signale wie SIGTERM und SIGKILL verwendest und mehrere Treffer sicher prüfst.

Was ist killall?

killall sendet ein Signal an laufende Prozesse, die zu einem angegebenen Prozessnamen passen. Ein Prozess ist eine laufende Instanz eines Programms. Das Signal ist eine Nachricht des Betriebssystems, beispielsweise die Aufforderung, einen Prozess zu beenden.

Im Unterschied zu kill wählst du das Ziel nicht über eine einzelne PID aus. Die PID ist die eindeutige Prozesskennung eines Prozesses. Bei killall erfolgt die Auswahl anhand des Prozessnamens.

Grundsyntax von killall

killall [Optionen] Prozessname

Du kannst einen oder mehrere Prozessnamen angeben:

killall firefox thunderbird

Der angegebene Name muss zur laufenden Programminstanz passen. Je nach Programm und lokaler Implementierung kann sich der sichtbare Prozessname vom Namen der gestarteten Datei unterscheiden. Prüfe bei Unsicherheit die tatsächlichen Namen mit ps und lies die lokale Dokumentation mit man killall.

Prozesse normal beenden

Ohne Signaloption verwendet killall normalerweise SIGTERM. Dieses Signal ist eine reguläre Aufforderung zum Beenden. Der Prozess kann darauf reagieren, Dateien schließen, temporäre Daten sichern und eigene Aufräumarbeiten durchführen.

killall PROZESSNAME

Beispiel: Alle passenden laufenden Instanzen von dd erhalten das normale Beendigungssignal:

killall dd

Versuche grundsätzlich zuerst die normale Beendigung. Warte anschließend kurz und prüfe, ob der Prozess tatsächlich beendet wurde.

Signale mit killall senden

Mit der Option -s legst du das zu sendende Signal ausdrücklich fest. Signale können als Name oder als Nummer angegeben werden:

killall -s SIGTERM dd
killall -s 15 dd

Die Signalnummern sind auf vielen Linux-Systemen standardisiert, können sich aber bei einzelnen Unix-artigen Systemen unterscheiden. Die lokale Manpage ist deshalb die verlässlichste Referenz.

Häufige Signale

SignalNummerWirkungTypischer EinsatzHinweis
SIGTERM15Reguläre BeendigungsanforderungStandardfall zum kontrollierten BeendenDer Prozess kann das Signal behandeln
SIGKILL9Sofortiges, erzwungenes BeendenLetzter Schritt bei einem nicht reagierenden ProzessNicht abfangbar; keine Aufräumarbeiten möglich
SIGHUP1Auflegen oder erneute KonfigurationBei bestimmten Daemons zum Neuladen der KonfigurationDie konkrete Wirkung hängt vom Programm ab
SIGINT2UnterbrechungÄhnlich einer Unterbrechung durch Ctrl+CDas Programm kann darauf reagieren

SIGKILL als letzter Ausweg

SIGKILL beziehungsweise Signal 9 beendet einen Prozess sofort:

killall -s 9 dd

Dieser Befehl sendet Signal 9 an alle passenden Prozesse mit dem Namen dd. SIGKILL kann der Prozess weder abfangen noch ablehnen. Dadurch erhält er keine Gelegenheit, offene Dateien zu schließen, Daten zu speichern oder andere Aufräumarbeiten auszuführen. Verwende es daher erst, wenn SIGTERM erfolglos war und das sofortige Beenden vertretbar ist.

Beispiel: laufende dd-Prozesse beenden

dd ist ein Kommandozeilenprogramm zum Kopieren und Umwandeln von Daten. Angenommen, mehrere dd-Prozesse laufen und sollen kontrolliert beendet werden:

killall dd

Damit werden alle passenden dd-Prozesse angesprochen, nicht nur die zuerst gestartete Instanz. Reagiert ein blockierter Prozess nicht auf SIGTERM, kann nach einer Prüfung der Treffer folgender letzter Versuch sinnvoll sein:

killall -s 9 dd

Vorher solltest du prüfen, welche Prozesse tatsächlich laufen und welche PID zu ihnen gehört.

Sicher und gezielt arbeiten

Vorher laufende Prozesse prüfen

Mit ps kannst du vor dem Beenden kontrollieren, ob passende Prozesse existieren:

ps -ef | grep '[d]d'

Die Schreibweise '[d]d' verhindert, dass der eigene grep-Suchprozess als Treffer in der Ausgabe erscheint. Prüfe die gesamte Ausgabe, insbesondere Benutzer, PID, Prozessname und gestartete Argumente.

Auch wenn nur eine bestimmte Instanz gemeint ist, kann killall mehrere Prozesse mit demselben Namen treffen. Bei allgemeinen Programmen oder mehrfach gestarteten Diensten ist deshalb besondere Vorsicht nötig.

Berechtigungen und sudo

Ein Prozess darf normalerweise nur von seinem Besitzer oder von einem Benutzer mit ausreichenden Rechten signalisiert werden. Gehört der Zielprozess einem anderen Benutzer, kann ein Berechtigungsfehler erscheinen. Falls die Beendigung administrativ erlaubt und notwendig ist, kannst du sudo verwenden:

sudo killall dd

sudo führt den Befehl mit erweiterten Rechten aus. Prüfe auch dann vorher die Treffer: Mit sudo kann der Befehl möglicherweise mehr Prozesse beenden als ohne erhöhte Rechte.

killall, kill und pkill im Vergleich

BefehlAuswahl des ZielprozessesTypischer AnwendungsfallRisiko bei mehreren Treffern
killBekannte PIDEine bestimmte Prozessinstanz gezielt signalisierenGeringer, wenn die PID geprüft wurde
killallProzessnameAlle passenden Prozesse eines Namens ansprechenMehrere gleichnamige Prozesse können betroffen sein
pkillName oder MusterProzesse anhand flexibler Namens- oder Mustersuche auswählenBesonders auf Muster und mögliche Zusatztreffer achten

Wenn genau eine Instanz beendet werden soll und ihre PID bekannt ist, ist kill meist die klarere Wahl. Wenn eine Namens- oder Mustersuche erforderlich ist, kommen killall oder pkill infrage. Details zu Optionen und zur Namensübereinstimmung unterscheiden sich je nach System. Nutze deshalb:

man killall

Fehlerbehebung

„Kein Prozess gefunden“

  • Der angegebene Prozessname stimmt nicht mit dem tatsächlichen Namen überein.
  • Der Prozess wurde bereits beendet.
  • Die Anwendung läuft unter einem anderen oder verkürzten Namen.

Prüfe die laufenden Prozesse mit ps und vergleiche den dort angezeigten Namen mit dem killall-Argument. Die lokale Manpage erklärt, welche Namensbestandteile die verwendete Implementierung berücksichtigt.

Der Prozess läuft trotz killall weiter

  • Der Prozess reagiert nicht auf SIGTERM.
  • Der falsche Prozessname wurde verwendet.
  • Der Prozess befindet sich in einem nicht unterbrechbaren Kernelzustand, etwa während eines blockierten Ein-/Ausgabevorgangs.

Prüfe zunächst Name und Prozessstatus. Wenn der Prozess normal nicht beendet werden kann, kann SIGKILL als letzter Schritt versucht werden. Bei einem nicht unterbrechbaren Zustand hilft auch SIGKILL nicht zwingend; dann muss die blockierte Ressource oder das zugrunde liegende Geräte- beziehungsweise Dateisystemproblem untersucht werden.

Berechtigungsfehler

Der Zielprozess gehört wahrscheinlich einem anderen Benutzer oder die aktuelle Sitzung hat nicht genügend Rechte. Arbeite als Prozessbesitzer oder verwende nach sorgfältiger Prüfung sudo.

Mehr Prozesse als erwartet wurden beendet

Das bedeutet meist, dass mehrere Instanzen denselben Prozessnamen hatten. Prüfe vor dem nächsten Versuch mit ps alle Treffer. Für eine einzelne bekannte Instanz solltest du stattdessen die PID verwenden:

kill PID

Prüfungshinweise

  • killall wählt Prozesse anhand ihres Namens aus und kann mehrere Treffer gleichzeitig signalisieren.
  • Ohne Signaloption wird normalerweise SIGTERM verwendet.
  • -s akzeptiert einen Signalnamen oder eine Signalnummer, beispielsweise SIGTERM oder 9.
  • SIGKILL beziehungsweise Signal 9 beendet sofort und lässt keine kontrollierte Aufräumarbeit zu.
  • Vor einem breit wirkenden Befehl sollten die laufenden Prozesse mit ps geprüft werden.
  • kill arbeitet typischerweise mit einer PID, während pkill namens- oder musterorientiert arbeitet.

Für weiterführende Grundlagen sind Prozesse mit kill über eine PID beenden, der dd-Befehl und Manpages verwenden passende Ergänzungen.