VMware ESXi and vSphere Cluster Management
Linux-Prozesse mit kill beenden und steuern
Lerne, wie du Linux-Prozesse mit kill, SIGTERM und SIGKILL sicher beendest, PIDs ermittelst, Prozesse pausierst und typische Fehler analysierst.
Mit dem Linux-Befehl kill lassen sich laufende Prozesse gezielt steuern. Trotz seines Namens beendet kill einen Prozess nicht zwingend sofort: Der Befehl sendet zunächst ein Signal, also eine Betriebssystemnachricht, an eine Prozess-ID.
In dieser Lektion lernst du, wie du eine PID sicher ermittelst, zunächst eine reguläre Beendigung anforderst und nur bei Bedarf zu einem härteren Signal wechselst. Außerdem geht es um Prozessrechte, top, wichtige Signale, pausierte Prozesse sowie die Grenzen von kill.
Grundprinzip von kill: Ein Signal an eine PID senden
Ein Prozess ist eine ausgeführte Instanz eines Programms. Linux weist jedem laufenden Prozess eine numerische Prozess-ID zu, kurz PID. Über diese PID kann ein Benutzer oder das Betriebssystem den Prozess gezielt ansprechen.
Ein Signal ist eine Nachricht des Betriebssystems an einen Prozess. Je nach Signal kann die Nachricht beispielsweise eine Beendigung anfordern, eine Konfigurationsdatei neu einlesen lassen, den Prozess anhalten oder seine Ausführung fortsetzen.
Der Prozess kann viele Signale selbst verarbeiten. Bei SIGTERM kann ein Programm zum Beispiel offene Dateien schließen, Daten speichern und anschließend regulär beenden. Das Signal bedeutet also zunächst: „Beende dich kontrolliert.“ Ob und wie schnell der Prozess darauf reagiert, hängt vom Programm und seinem aktuellen Zustand ab.
Einige Signale sind besondere Ausnahmen. SIGKILL und SIGSTOP können weder abgefangen noch ignoriert werden. Bei SIGKILL beendet der Kernel den Prozess, ohne dessen eigene Aufräumlogik auszuführen.
Die PID des Zielprozesses ermitteln
Bevor du ein Signal sendest, musst du das Ziel eindeutig identifizieren. Eine falsche PID kann zu Datenverlust, einem Abbruch des falschen Programms oder einer Unterbrechung eines wichtigen Dienstes führen. Prüfe deshalb möglichst den Prozessnamen, den Benutzer, die Startzeit und die vollständige Kommandozeile.
Prozesse interaktiv mit top finden
top zeigt laufende Prozesse und wichtige Systemwerte wie CPU- und Speichernutzung an:
top
In der Prozessliste findest du typischerweise Spalten wie PID, USER, PR, %CPU, %MEM und COMMAND. Eine hohe CPU-Auslastung kann auf einen problematischen Prozess hinweisen, ist aber nicht automatisch ein Fehler. Ein Compiler, eine Datenbankabfrage oder eine geplante Berechnung darf vorübergehend viel CPU verwenden.
Notiere die PID und überprüfe sie anschließend mit einer detaillierteren Abfrage. Mit q verlässt du top.
Prozessinformationen mit ps prüfen
Mit ps kannst du die Identität eines Prozesses gezielt kontrollieren:
ps -fp 13203
Die Option -f zeigt eine ausführlichere Darstellung. Dabei sind unter anderem Benutzer, Elternprozess und Kommandozeile sichtbar. Eine weitere nützliche Abfrage zeigt PID, Zustand und Kommando:
ps -o pid,state,cmd -p 13203
Die vollständige Kommandozeile ist besonders wichtig, wenn mehrere Prozesse denselben Programmnamen verwenden. Prüfe außerdem, ob der Prozess zwischenzeitlich beendet wurde. Eine PID kann später von einem anderen Prozess wiederverwendet werden.
Gezielte Suche mit pgrep und pidof
pgrep sucht Prozesse anhand ihres Namens. Mit -a werden zusätzlich die Kommandozeilen ausgegeben:
pgrep -a dd
Bei mehreren Treffern darfst du nicht einfach alle gefundenen PIDs beenden. Vergleiche Benutzer, Argumente und Zweck der einzelnen Prozesse:
ps -fp 13203
pidof liefert die PIDs eines Programms, sofern der Programmname passend bekannt ist:
pidof programmname
Auch hier gilt: Ein Name allein identifiziert nicht immer genau den gewünschten Prozess. Verwende die Ausgabe nur als Ausgangspunkt und prüfe das Ziel vor dem Signalisieren.
kill-Syntax und Standardsignal
Die grundlegende Syntax lautet:
kill PID
Ohne explizite Signalangabe sendet kill normalerweise SIGTERM. Dieses Signal fordert eine kontrollierte Beendigung an:
kill 13203
Das Standardsignal kann ausdrücklich angegeben werden. Diese Schreibweisen bedeuten dasselbe:
kill -TERM 13203
kill -SIGTERM 13203
kill -15 13203
Signalnamen sind in Skripten und bei manueller Arbeit meist lesbarer als Nummern. Außerdem können Nummern einzelner Signale je nach Architektur variieren. Informiere dich mit kill -l über die auf deinem System bekannten Signale:
kill -l
Die genaue Ausgabe und die Nummern sind von Betriebssystem und Architektur abhängig. Verwende deshalb bevorzugt Namen wie TERM, KILL, STOP oder CONT.
Wichtige Signale im Überblick
| Signalname | Übliche Nummer | Wirkung | Abfangbar oder ignorierbar | Typischer Einsatz |
|---|---|---|---|---|
| SIGHUP | 1 | Ursprünglich Hinweis auf eine getrennte Terminalverbindung. Viele Hintergrunddienste verwenden es zusätzlich zum erneuten Einlesen ihrer Konfiguration. | In der Regel ja | Terminal-Trennung oder dokumentiertes Konfigurations-Reload eines Dienstes |
| SIGTERM | 15 | Reguläre Bitte, den Prozess kontrolliert zu beenden | Ja | Standard und bevorzugter erster Beendigungsversuch |
| SIGKILL | 9 | Beendet den Prozess unmittelbar aus Sicht des Kernels | Nein | Letzte Eskalationsstufe bei einem nicht reagierenden Prozess |
| SIGSTOP | 19, je nach System | Hält einen Prozess an | Nein | Vorübergehendes Pausieren |
| SIGCONT | 18, je nach System | Setzt einen angehaltenen Prozess fort | Nein | Fortsetzen nach SIGSTOP |
SIGHUP: Terminal-Trennung und Konfiguration
SIGHUP steht historisch mit dem Auflegen einer Terminalverbindung in Verbindung. Bei interaktiven Programmen kann eine getrennte Shell oder Terminalverbindung dieses Signal auslösen.
Viele Daemons, also dauerhaft im Hintergrund laufende Dienste, verwenden SIGHUP als Aufforderung, ihre Konfiguration erneut zu lesen. Das ist jedoch keine allgemeine Regel. Sende SIGHUP an einen Dienst nur, wenn dessen Dokumentation dieses Verhalten bestätigt. Bei systemd-Diensten ist eine dokumentierte Aktion wie systemctl reload oft die bessere Wahl.
SIGTERM: die freundliche Beendigungsanfrage
SIGTERM ist das Standardsignal von kill. Ein Programm kann darauf reagieren und kontrolliert aufräumen. Dazu gehören beispielsweise das Schließen von Dateien, das Freigeben von Ressourcen, das Schreiben von Statusdaten oder das Beenden laufender Transaktionen.
SIGKILL: nur als letzte Option
SIGKILL kann nicht abgefangen, blockiert oder ignoriert werden. Der Prozess erhält keine Gelegenheit, eigene Aufräumroutinen auszuführen:
kill -KILL 13203
kill -SIGKILL 13203
Dadurch können unvollständige Schreibvorgänge, temporäre Dateien oder inkonsistente Anwendungsdaten zurückbleiben. Verwende SIGKILL daher erst, wenn SIGTERM wirkungslos bleibt und du die möglichen Folgen akzeptierst.
SIGSTOP und SIGCONT: Prozesse pausieren
Mit SIGSTOP hältst du einen Prozess an. Das Signal ist nicht abfangbar:
kill -STOP 13203
ps -o pid,state,cmd -p 13203
Der Prozess bleibt vorhanden, führt aber vorübergehend keinen normalen Code aus. Mit SIGCONT setzt du ihn fort:
kill -CONT 13203
Ein angehaltener Prozess ist nicht beendet. Bei einem produktiven Dienst kann das Anhalten ebenso störend sein wie ein Absturz.
Sichere Eskalationsstrategie
Arbeite beim Beenden eines Prozesses in klaren Schritten:
- Ziel prüfen: Ermittle die PID und kontrolliere Prozessname, Benutzer, Kommandozeile und möglichst den Zweck des Prozesses.
- SIGTERM senden: Verwende
kill PIDoder ausdrücklichkill -TERM PID. - Zeit geben: Warte kurz, damit das Programm Daten speichern und Ressourcen freigeben kann.
- Existenz prüfen: Frage mit
ps -p PIDoder einer anderen Prozessabfrage nach, ob die PID noch vorhanden ist. - SIGKILL nur bei Bedarf: Wenn der Prozess weiterläuft und die Risiken akzeptabel sind, verwende
kill -KILL PID. - Ergebnis kontrollieren: Prüfe erneut die Prozessliste, die Systemauslastung und gegebenenfalls Protokolle.
Wichtig: Ein erfolgreich ausgeführter kill-Befehl bedeutet zunächst nur, dass das Signal gesendet wurde. Er beweist nicht, dass der Prozess bereits beendet ist.
Praktisches Beispiel: CPU-intensiven Prozess regulär beenden
Angenommen, top zeigt einen Prozess mit auffällig hoher CPU-Auslastung. Die PID lautet in diesem Beispiel 13203.
- Starte die Überwachung:
top
- Prüfe nach dem Ablesen der PID Besitzer und Kommandozeile:
ps -fp 13203
- Fordere eine reguläre Beendigung an:
kill 13203
- Kontrolliere, ob der Prozess noch existiert:
ps -p 13203
Wenn keine Prozesszeile mehr erscheint, wurde der Prozess beendet. Prüfe bei Bedarf erneut mit top, ob sich die CPU-Auslastung normalisiert hat.
Praktisches Beispiel: nicht reagierenden Prozess eskalieren
Ein nicht reagierendes Programm sollte zunächst ebenfalls regulär beendet werden:
kill -SIGTERM 13203
ps -p 13203
Warte abhängig von der Anwendung angemessen lange. Ein Programm kann wegen laufender Dateivorgänge, Datenbanktransaktionen oder umfangreicher Aufräumarbeiten einige Zeit benötigen.
Bleibt der Prozess ohne nachvollziehbaren Grund bestehen, kannst du als letzte Eskalationsstufe ein nicht abfangbares Signal senden:
kill -SIGKILL 13203
ps -p 13203
Behandle die Anwendung anschließend wie nach einem Absturz: Prüfe Datenintegrität, Protokolle und gegebenenfalls temporäre Dateien.
Prozess anhand seines Namens suchen
Für eine Namenssuche eignet sich pgrep:
pgrep -a dd
Wenn mehrere Prozesse gefunden werden, kontrollierst du jeden relevanten Treffer einzeln:
ps -fp 13203
Erst danach signalisierst du die gewünschte PID:
kill -TERM 13203
Vermeide unpräzise Aktionen gegen einen bloßen Namen, wenn mehrere Instanzen, Benutzer oder unterschiedliche Kommandozeilen vorhanden sind.
Berechtigungen und Prozesseigentümerschaft
Der Prozesseigentümer ist das Benutzerkonto, unter dem ein Prozess läuft. Ein normaler Benutzer darf in der Regel nur eigene Prozesse signalisieren. Für fremde Prozesse oder Systemprozesse fehlen normalerweise die erforderlichen Rechte.
Prüfe den Eigentümer mit:
ps -fp 13203
Falls das Signalisieren berechtigt und fachlich notwendig ist, kannst du erhöhte Rechte verwenden:
sudo kill -TERM 13203
Sei bei Prozessen von root, bei Systemdiensten und bei sicherheitsrelevanten Programmen besonders vorsichtig. Das Beenden eines kritischen Prozesses kann Sitzungen trennen, Datenbankoperationen unterbrechen oder das System destabilisieren.
Wann systemctl statt kill sinnvoller ist
Ein systemd-Dienst wird nicht nur durch eine einzelne PID definiert. Der Dienstmanager kennt Abhängigkeiten, Startreihenfolge, Neustartregeln und den gewünschten Dienstzustand. Deshalb solltest du einen solchen Dienst bevorzugt über systemctl verwalten.
systemctl status nginx
sudo systemctl stop nginx
Bei einer Konfigurationsänderung ist häufig ein Reload vorgesehen:
sudo systemctl reload nginx
Ein direktes SIGHUP ist nur dann angebracht, wenn die verwendete Software dieses Signal dokumentiert unterstützt. Ein direkter kill kann den Dienstmanager übergehen und zu einem unerwarteten Neustart oder einem falschen Status führen.
Grenzen von kill
Prozesse im Zustand D
Ein Prozess im Zustand D befindet sich im ununterbrechbaren Schlaf. Häufig wartet er auf eine blockierte Kernel- oder Ein-/Ausgabeoperation, etwa auf ein Speichergerät, ein Netzwerkdateisystem oder ein anderes Gerät.
Solange diese Kerneloperation nicht zurückkehrt, kann der Prozess auch auf SIGKILL nicht sofort verschwinden. Untersuche den Zustand beispielsweise so:
ps -o pid,state,cmd -p 13203
Bei einem D-Zustand liegt die eigentliche Ursache meist unterhalb der Anwendung: bei Speicher, Netzwerk, Treibern oder Geräten. Je nach Ursache kann eine Reparatur der Infrastruktur oder ein Neustart erforderlich sein.
Zombie-Prozesse
Ein Zombie-Prozess ist bereits beendet. Sein Elternprozess hat lediglich den Beendigungsstatus noch nicht abgeholt. Der Zombie führt keinen Programmcode mehr aus und kann deshalb nicht durch ein weiteres kill beendet werden.
Untersuche PID, Zustand und Elternprozess:
ps -o pid,ppid,state,cmd -p 13203
Die Lösung besteht darin, den Elternprozess beziehungsweise dessen Fehler zu behandeln, damit er den Status des Kindprozesses einsammelt. Das direkte Signalisieren des Zombies selbst beseitigt ihn nicht.
Entscheidungshilfe zum Beenden eines Prozesses
| Situation | Empfohlene Aktion | Warum | Risiko |
|---|---|---|---|
| Programm reagiert noch | kill -TERM PID und anschließend prüfen | Das Programm kann kontrolliert beenden und Daten sichern. | Geringer als bei einem erzwungenen Abbruch |
| Programm reagiert nicht auf SIGTERM | Warten, Status und Protokolle prüfen; erst danach eventuell kill -KILL PID | Ein langsamer kontrollierter Abschluss wird nicht unnötig unterbrochen. | Bei SIGKILL möglicher Datenverlust oder inkonsistenter Zustand |
| Systemdienst mit Konfigurationsänderung | Dokumentierte systemctl reload DIENST-Aktion verwenden | Der Dienstmanager und die Anwendung können den Reload korrekt koordinieren. | Ein falsches Signal kann Verbindungen oder den Dienstbetrieb stören |
| Prozess im Zustand D | Ursache der blockierten Ein-/Ausgabe untersuchen | Signale werden möglicherweise erst nach Rückkehr aus der Kerneloperation wirksam. | Geräte-, Speicher- oder Dateisystemprobleme können fortbestehen |
| Zombie-Prozess | Elternprozess und Prozesshierarchie untersuchen | Der Prozess ist bereits beendet; der Elternprozess muss den Status abholen. | Das Beenden des falschen Elternprozesses kann weitere Prozesse beeinträchtigen |
Typische Fehlermeldungen und Lösungen
„Operation not permitted“
Diese Meldung bedeutet meist, dass der Prozess einem anderen Benutzer gehört oder administrative Rechte erforderlich sind. Prüfe zuerst den Eigentümer:
ps -fp 13203
Wenn die Aktion fachlich und organisatorisch erlaubt ist, verwende sudo:
sudo kill -TERM 13203
Bei Systemprozessen musst du vorab die Auswirkungen bewerten.
„No such process“
Die PID ist möglicherweise falsch, der Prozess wurde bereits beendet oder die PID wurde aus einer veralteten Anzeige übernommen. Frage die Prozessliste erneut ab und kontrolliere vor dem Signal Besitzer und Kommandozeile:
ps -p 13203
pgrep -a programmname
Der Prozess läuft nach SIGTERM weiter
Das Programm kann SIGTERM langsam verarbeiten, anders behandeln oder auf eine blockierte Operation warten. Warte zunächst angemessen und untersuche den Status:
ps -o pid,state,cmd -p 13203
Erst wenn SIGTERM wirkungslos bleibt und die Folgen akzeptiert werden, ist SIGKILL eine mögliche letzte Option.
Der Prozess bleibt nach SIGKILL sichtbar
Prüfe, ob der Prozess den Zustand D hat oder ein Zombie ist:
ps -o pid,ppid,state,cmd -p 13203
Bei D muss die blockierte Ein-/Ausgabeursache untersucht werden. Bei einem Zombie musst du den Elternprozess behandeln.
Nach dem Beenden treten Datenfehler auf
Wahrscheinliche Ursachen sind ein erzwungener Abbruch während eines Schreibvorgangs oder fehlende Aufräumarbeiten. Prüfe Anwendungsprotokolle und Datenintegrität. Verwende künftig zuerst SIGTERM und bei Diensten den vorgesehenen stop- oder reload-Mechanismus.
Prüfungsrelevante Merksätze
killsendet ein Signal; der Name bedeutet nicht automatisch sofortiges Beenden.- Eine PID identifiziert einen laufenden Prozess, kann aber nach dessen Ende wiederverwendet werden.
kill PIDsendet normalerweiseSIGTERM.SIGTERMist die bevorzugte reguläre Beendigungsanfrage.SIGKILList nicht abfangbar und verhindert Aufräumarbeiten des Programms.SIGSTOPhält an,SIGCONTsetzt fort.- Prozesse im Zustand
Dkönnen trotzSIGKILLsichtbar bleiben. - Zombie-Prozesse sind bereits beendet und müssen vom Elternprozess eingesammelt werden.
- Für systemd-Dienste ist
systemctlmeist geeigneter als ein direktes Signalisieren einer PID.
Eine sichere Kurzform lautet: PID ermitteln, Ziel verifizieren, SIGTERM senden, Ergebnis prüfen und SIGKILL nur als letzte Eskalationsstufe verwenden.