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] ProzessnameDu kannst einen oder mehrere Prozessnamen angeben:
killall firefox thunderbirdDer 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 PROZESSNAMEBeispiel: Alle passenden laufenden Instanzen von dd erhalten das normale Beendigungssignal:
killall ddVersuche 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 ddDie 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
| Signal | Nummer | Wirkung | Typischer Einsatz | Hinweis |
|---|---|---|---|---|
| SIGTERM | 15 | Reguläre Beendigungsanforderung | Standardfall zum kontrollierten Beenden | Der Prozess kann das Signal behandeln |
| SIGKILL | 9 | Sofortiges, erzwungenes Beenden | Letzter Schritt bei einem nicht reagierenden Prozess | Nicht abfangbar; keine Aufräumarbeiten möglich |
| SIGHUP | 1 | Auflegen oder erneute Konfiguration | Bei bestimmten Daemons zum Neuladen der Konfiguration | Die konkrete Wirkung hängt vom Programm ab |
| SIGINT | 2 | Unterbrechung | Ähnlich einer Unterbrechung durch Ctrl+C | Das Programm kann darauf reagieren |
SIGKILL als letzter Ausweg
SIGKILL beziehungsweise Signal 9 beendet einen Prozess sofort:
killall -s 9 ddDieser 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 ddDamit 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 ddVorher 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 ddsudo 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
| Befehl | Auswahl des Zielprozesses | Typischer Anwendungsfall | Risiko bei mehreren Treffern |
|---|---|---|---|
kill | Bekannte PID | Eine bestimmte Prozessinstanz gezielt signalisieren | Geringer, wenn die PID geprüft wurde |
killall | Prozessname | Alle passenden Prozesse eines Namens ansprechen | Mehrere gleichnamige Prozesse können betroffen sein |
pkill | Name oder Muster | Prozesse anhand flexibler Namens- oder Mustersuche auswählen | Besonders 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 killallFehlerbehebung
„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 PIDPrüfungshinweise
- killall wählt Prozesse anhand ihres Namens aus und kann mehrere Treffer gleichzeitig signalisieren.
- Ohne Signaloption wird normalerweise SIGTERM verwendet.
-sakzeptiert einen Signalnamen oder eine Signalnummer, beispielsweiseSIGTERModer9.- SIGKILL beziehungsweise Signal 9 beendet sofort und lässt keine kontrollierte Aufräumarbeit zu.
- Vor einem breit wirkenden Befehl sollten die laufenden Prozesse mit
psgeprüft werden. killarbeitet typischerweise mit einer PID, währendpkillnamens- 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.