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 | grepverwenden, wird dergrep-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
killallundpkill: Wenn Sie versehentlich einen kritischen Systemprozess (wieinitodersystemd) ansprechen, können Sie Ihr gesamtes Betriebssystem destabilisieren oder zum Absturz bringen. Überprüfen Sie immer die Ziel-PID mitps, bevor Siekillalloderpkillmit breiten Mustern verwenden.
Zusammenfassung des Prozessverwaltungs-Workflows
Bei der Fehlerbehebung einer außer Kontrolle geratenen Anwendung befolgen Sie diesen systematischen Ansatz:
- Identifizieren: Verwenden Sie
ps aux | grep <process_name>, um die Prozess-PID zu finden und ihren Status zu überprüfen. - Zustand prüfen: Untersuchen Sie die Spalte
STAT. Wenn sieZ(Zombie) ist, ist der Elternprozess defekt, und ein Neustart kann erforderlich sein, wenn der Elternprozess nicht beendet werden kann. - Ordentlichen Stopp versuchen: Senden Sie
SIGTERM(Standardkill PID). Warten Sie einige Sekunden. - Stopp überprüfen: Führen Sie
pserneut aus. - 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.