Leitfaden zum Verständnis der Linux-Prozessverwaltung mit 'ps' und 'kill'

Erlernen Sie grundlegende Fähigkeiten der Linux-Systemadministration, indem Sie lernen, laufende Anwendungen mithilfe von `ps` und `kill` zu verwalten. Dieser Leitfaden erläutert detailliert, wie Sie `ps` verwenden, um Prozess-IDs (PIDs), Ressourcennutzung und Zustände zu überprüfen, und wie Sie `kill` einsetzen, um spezifische Signale zu senden – von einer geordneten Beendigung (SIGTERM) bis zu einer erzwungenen Unterbrechung (SIGKILL) –, um einen stabilen und kontrollierten Systembetrieb sicherzustellen.

39 Aufrufe

Leitfaden zum Verständnis der Linux-Prozessverwaltung mit 'ps' und 'kill'

Die Verwaltung von Prozessen ist grundlegend für eine effektive Linux-Systemadministration. Wenn Anwendungen nicht mehr reagieren, übermäßige Ressourcen verbrauchen oder elegant neu gestartet werden müssen, ist es entscheidend zu wissen, wie man sie identifiziert und mit ihnen interagiert. Dieser Leitfaden dient als umfassende Einführung in das Rückgrat der Prozessverwaltung unter Linux: den ps-Befehl zum Anzeigen von Prozesszuständen und den kill-Befehl zum Senden von Signalen zur Verwaltung ihres Lebenszyklus.

Das Verständnis, wie Linux laufende Programme handhabt – jedes mit einer eindeutigen Prozess-ID (PID) versehen – ermöglicht es Administratoren, die Systemstabilität aufrechtzuerhalten, Leistungsengpässe zu beheben und sicherzustellen, dass Dienste wie erwartet funktionieren. Wir werden die essentielle Syntax und gängige Flags untersuchen, die diese Befehle zu unverzichtbaren Werkzeugen in der Toolbox jedes Systemadministrators machen.

Das Linux-Prozessmodell: PIDs und Zustände

Unter Linux wird jedes laufende Programm, jeder Dienst oder jede Aufgabe als Prozess behandelt. Jeder Prozess wird eindeutig durch eine Prozess-ID (PID) identifiziert, eine positive Ganzzahl, die vom Kernel bei der Erstellung zugewiesen wird. Diese PID ist die primäre Methode, mit der Systemwerkzeuge einen bestimmten Prozess referenzieren und manipulieren.

Prozesse durchlaufen verschiedene Zustände (z. B. Läuft, Schläft, Gestoppt, Zombie). Die Kenntnis des Zustands kann sofort Aufschluss über Fehlerbehebungsschritte geben.

Prozesse anzeigen mit dem ps-Befehl

Der ps-Befehl (process status) wird verwendet, um Informationen über aktuell laufende Prozesse anzuzeigen. Da die Ausgabe überwältigend sein kann, werden verschiedene Optionen verwendet, um auszuwählen, welche Prozesse angezeigt und welche Informationsspalten aufgenommen werden sollen.

Wesentliche ps-Syntax und Flags

Es gibt zwei primäre Stile für ps-Flags: Unix-Stil (mit vorangestelltem -) und BSD-Stil (ohne Präfix). Die moderne Praxis bevorzugt oft die Kombination von Flags im Unix-Stil für umfassende Ansichten.

1. Alle Prozesse anzeigen (BSD-Stil)

Der gebräuchlichste Befehl für eine Systemübersicht ist ps aux.

  • a: Zeigt Prozesse für alle Benutzer an.
  • u: Zeigt Prozesse in einem benutzerorientierten Format an (zeigt Benutzer, CPU-Auslastung, Speichernutzung usw.).
  • x: Enthält Prozesse, die kein kontrollierendes Terminal haben (wie Hintergrund-Daemons).
ps aux

2. Prozesse in einem Standardformat anzeigen (UNIX-Stil)

Der Befehl ps -ef bietet eine vollständige Liste in einem älteren, aber immer noch weit verbreiteten Format.

  • -e: Wählt alle Prozesse aus.
  • -f: Zeigt die vollständige Formatliste an (einschließlich PPID und Befehlsargumente).
ps -ef

Interpretation wichtiger Ausgabespalten

Unabhängig von den verwendeten Flags sind bestimmte Spalten für die Prozessverwaltung kritisch:

Spalte Beschreibung
PID Prozess-ID (der eindeutige Bezeichner)
PPID Elternprozess-ID (die PID des Prozesses, der diesen gestartet hat)
USER Der Benutzer, dem der Prozess gehört
%CPU Prozentsatz der verwendeten CPU-Zeit
%MEM Prozentsatz des verwendeten physischen Speichers
VSZ Virtuelle Speichergröße (in KiB)
RSS Resident Set Size (verwendeter physischer Speicher, in KiB)
STAT Aktueller Zustand des Prozesses (z. B. R=Running, S=Sleeping, Z=Zombie)
COMMAND Der Befehl, der den Prozess gestartet hat

Prozesse filtern mit grep

Um einen bestimmten Prozess zu finden, ist es Standardpraxis, die Ausgabe von ps an grep weiterzuleiten.

Beispiel: Alle laufenden Instanzen des Apache-Webservers (httpd) finden:

ps aux | grep httpd

Tipp: Wenn Sie ps | grep verwenden, wird der grep-Befehl selbst oft in der Ausgabe aufgeführt. Um dies herauszufiltern, verwenden Sie die Klammernotation in Ihrem Suchmuster:
bash ps aux | grep '[h]ttpd'

Prozesse verwalten mit dem kill-Befehl

Der kill-Befehl stoppt Prozesse nicht nur; er sendet Signale an sie. Das Standardverhalten ist die Anforderung einer ordnungsgemäßen Beendigung, aber andere Signale können einen Prozess anweisen, Konfigurationsdateien neu zu lesen, die Ausführung vorübergehend anzuhalten oder einen sofortigen Exit zu erzwingen.

Signale verstehen

Signale sind standardisierte numerische oder mnemonische Codes. Sie können verfügbare Signale mit kill -l auflisten.

Signalname Signalnummer Beschreibung
SIGTERM 15 Das Standardsignal zur Beendigung. Fordert den Prozess auf, sich ordnungsgemäß herunterzufahren.
SIGKILL 9 Das sofortige, erzwungene Beendigungssignal. Der Prozess kann dies nicht ignorieren.
SIGHUP 1 Hangup-Signal, oft von Daemons verwendet, um Konfigurationsdateien neu zu lesen.
SIGSTOP 19 Stoppt (pausiert) einen Prozess, ohne ihn zu beenden.
SIGCONT 18 Setzt einen gestoppten Prozess fort.

Signale senden mit kill

Die grundlegende Syntax für den kill-Befehl ist:

kill -SIGNAL PID

1. Ordentliche Beendigung (Die Best Practice)

Versuchen Sie immer, einen Prozess zuerst ordentlich mit SIGTERM (Signal 15) zu beenden. Dies gibt der Anwendung Zeit, Daten zu speichern und Verbindungen zu schließen.

kill 12345  # Standardmäßig SIGTERM (15)
# ODER
kill -15 12345

2. Erzwingende Beendigung (Letzter Ausweg)

Wenn ein Prozess nicht reagiert und SIGTERM ignoriert, verwenden Sie SIGKILL (Signal 9). Dies stoppt den Prozess sofort, ohne Bereinigung, was potenziell zu Datenverlust oder Beschädigung in bestimmten Anwendungen führen kann.

kill -9 12345

Prozesse nach Namen verwalten: pkill und killall

Während ps und kill auf PIDs angewiesen sind, ist es manchmal schneller, Prozesse nach Namen anzusprechen. Verwenden Sie diese Befehle mit äußerster Vorsicht, da sie mehrere Prozesse gleichzeitig betreffen können.

killall

Beendet alle Prozesse, die dem exakten angegebenen Prozessnamen entsprechen.

killall httpd  # Sendet SIGTERM an alle Prozesse namens 'httpd'
killall -9 cron  # Beendet alle 'cron'-Prozesse gewaltsam

pkill

Ermöglicht das Musterabgleich (Regex) bei der Auswahl, welche Prozesse signalisiert werden sollen, und bietet mehr Flexibilität als killall.

# Beendet jeden Prozess, dessen Befehlsname 'firefox' enthält
pkill -f firefox

Warnung zu killall und pkill: Wenn Sie versehentlich einen kritischen Systemprozess (wie init oder systemd) ansprechen, können Sie Ihr gesamtes Betriebssystem destabilisieren oder zum Absturz bringen. Überprüfen Sie immer die Ziel-PID mit ps, bevor Sie killall oder pkill mit breiten Mustern verwenden.

Zusammenfassung des Prozessverwaltungs-Workflows

Bei der Fehlerbehebung einer außer Kontrolle geratenen Anwendung befolgen Sie diesen systematischen Ansatz:

  1. Identifizieren: Verwenden Sie ps aux | grep <process_name>, um die Prozess-PID zu finden und ihren Status zu überprüfen.
  2. Zustand prüfen: Untersuchen Sie die Spalte STAT. Wenn sie Z (Zombie) ist, ist der Elternprozess defekt, und ein Neustart kann erforderlich sein, wenn der Elternprozess nicht beendet werden kann.
  3. Ordentlichen Stopp versuchen: Senden Sie SIGTERM (Standard kill PID). Warten Sie einige Sekunden.
  4. Stopp überprüfen: Führen Sie ps erneut aus.
  5. Stopp erzwingen (falls nötig): Wenn der Prozess weiterhin besteht, senden Sie SIGKILL (kill -9 PID).

Die Beherrschung von ps und kill ist unerlässlich, um eine gesunde, reaktionsschnelle Linux-Umgebung aufrechtzuerhalten. Durch das Verständnis von PIDs und der verschiedenen verfügbaren Signale erhalten Administratoren präzise Kontrolle über die Systemausführung.