Leitfaden zum Verständnis der Linux-Prozessverwaltung mit 'ps' und 'kill'
Erfahren Sie, wie Sie Linux-Prozesse mit `ps` überprüfen, wichtige Spalten lesen und Prozesse sicher mit `kill`, `pkill` und `killall` beenden.
Leitfaden zum Verständnis der Linux-Prozessverwaltung mit 'ps' und 'kill'
Die Verwaltung von Linux-Prozessen ist eine tägliche Fehlerbehebungsfähigkeit. Wenn eine App hängt, ein Backup-Job CPU frisst oder ein Daemon einen sauberen Neustart benötigt, hilft ps Ihnen, den Prozess zu finden, und kill ermöglicht es Ihnen, das richtige Signal zu senden.
Jedes laufende Programm hat eine Prozess-ID, oder PID. Sobald Sie diese PID kennen, können Sie den Besitzer, Elternprozesse, CPU- und Speichernutzung überprüfen und entscheiden, ob Sie den Prozess bitten, sauber zu stoppen, oder ihn als letzten Ausweg gewaltsam beenden.
Das Linux-Prozessmodell: PIDs und Zustände
In 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 ganze Zahl, die vom Kernel bei der Erstellung zugewiesen wird. Diese PID ist die primäre Art und Weise, wie Systemtools auf einen bestimmten Prozess verweisen und ihn manipulieren.
Prozesse durchlaufen Zustände wie laufend, schlafend, gestoppt und Zombie. Ein schlafender Prozess wartet normalerweise auf E/A oder ein anderes Ereignis. Ein Zombie wurde bereits beendet, aber sein Elternprozess hat seinen Exit-Status noch nicht abgeholt.
Anzeigen von Prozessen mit dem Befehl ps
Der Befehl ps (Prozessstatus) 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 eingeschlossen werden sollen.
Wesentliche ps-Syntax und Flags
Es gibt zwei Hauptstile für ps-Flags: Unix-Stil (mit - Präfix) und BSD-Stil (kein Präfix). Die moderne Praxis bevorzugt oft die Kombination von Unix-Stil-Flags für umfassende Ansichten.
1. Anzeigen aller Prozesse (BSD-Stil)
Der häufigste Befehl für eine Systemübersicht ist ps aux.
a: Zeige Prozesse für alle Benutzer.u: Zeige Prozesse in einem benutzerorientierten Format (zeigt Benutzer, CPU-Auslastung, Speicherauslastung usw.).x: Schließe Prozesse ein, die kein steuerndes Terminal haben (wie Hintergrund-Daemons).
ps aux
2. Anzeigen von Prozessen in einem Standardformat (UNIX-Stil)
Der Befehl ps -ef liefert eine vollständige Auflistung im POSIX-Stil-Format.
-e: Wähle alle Prozesse aus.-f: Zeige die vollständige Formatliste, einschließlich PPID und Befehlsargumenten.
ps -ef
Interpretation der wichtigsten Ausgabespalten
Unabhängig von den verwendeten Flags sind bestimmte Spalten für die Prozessverwaltung entscheidend:
| Spalte | Beschreibung |
|---|---|
| PID | Prozess-ID (der eindeutige Identifikator) |
| PPID | Elternprozess-ID (die PID des Prozesses, der diesen gestartet hat) |
| USER | Der Benutzer, der den Prozess besitzt |
| %CPU | Prozentsatz der genutzten CPU-Zeit |
| %MEM | Prozentsatz des genutzten physischen Speichers |
| VSZ | Größe des virtuellen Speichers (in KiB) |
| RSS | Resident Set Size (genutzter physischer Speicher, in KiB) |
| STAT | Aktueller Zustand des Prozesses (z.B. R=Laufend, S=Schlafend, Z=Zombie) |
| COMMAND | Der Befehl, der den Prozess gestartet hat |
Filtern von Prozessen mit grep
Um einen bestimmten Prozess zu finden, können Sie ps an grep weiterleiten.
Dies sucht beispielsweise nach Apache httpd-Prozessen:
ps aux | grep httpd
Tipp:
ps | grepzeigt oft dengrep-Prozess selbst an. Die Klammernotation vermeidet diese zusätzliche Übereinstimmung:ps aux | grep '[h]ttpd'
Verwalten von Prozessen mit dem Befehl kill
Der Befehl kill stoppt nicht nur Prozesse; er sendet Signale an sie. Das Standardverhalten besteht darin, eine ordnungsgemäße Beendigung anzufordern, aber andere Signale können einen Prozess anweisen, Konfigurationsdateien erneut zu lesen, die Ausführung vorübergehend anzuhalten oder sofort zu beenden.
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 Standard-Beendigungssignal. Fordert den Prozess auf, sich ordnungsgemäß herunterzufahren. |
| SIGKILL | 9 | Das sofortige, gewaltsame Beendigungssignal. Der Prozess kann dies nicht ignorieren. |
| SIGHUP | 1 | Auflegesignal, das oft von Daemons verwendet wird, um Konfigurationsdateien erneut zu lesen. |
| SIGSTOP | Normalerweise 19 auf x86 Linux | Stoppt (pausiert) einen Prozess, ohne ihn zu beenden. |
| SIGCONT | Normalerweise 18 auf x86 Linux | Setzt einen gestoppten Prozess fort. |
Senden von Signalen mit kill
Die grundlegende Syntax für den Befehl kill lautet:
kill -SIGNAL PID
1. Ordentliche Beendigung (Die beste Praxis)
Versuchen Sie zuerst SIGTERM. Es gibt der Anwendung die Möglichkeit, den Zustand zu speichern, Dateien zu schließen, Anfragen zu beenden und Sperren freizugeben.
kill 12345 # Standardmäßig SIGTERM (15)
# ODER
kill -15 12345
2. Gewaltsame Beendigung (Letzter Ausweg)
Wenn ein Prozess nicht reagiert und SIGTERM ignoriert, verwenden Sie SIGKILL (Signal 9). Dies stoppt den Prozess ohne Bereinigung auf Anwendungsebene. Dies kann je nachdem, was der Prozess getan hat, zu teilweisen Schreibvorgängen, verlassenen Sperrdateien oder unterbrochenen Transaktionen führen.
kill -9 12345
Verwalten von Prozessen nach Namen: pkill und killall
Während ps und kill auf PIDs angewiesen sind, ist es manchmal schneller, Prozesse nach Namen zu adressieren. Verwenden Sie diese Befehle mit äußerster Vorsicht, da sie mehrere Prozesse gleichzeitig betreffen können.
killall
Beendet alle Prozesse, die mit dem angegebenen genauen Prozessnamen übereinstimmen.
killall httpd # Sendet SIGTERM an alle Prozesse namens 'httpd'
killall -9 cron # Beendet gewaltsam alle 'cron'-Prozesse
pkill
Ermöglicht Mustervergleiche (Regex) bei der Auswahl der zu signalisierenden Prozesse und bietet mehr Flexibilität als killall.
# Beendet jeden Prozess, dessen vollständige Befehlszeile 'firefox' enthält
pkill -f firefox
Warnung zu
killallundpkill: Wenn Sie versehentlich einen kritischen Systemprozess (wieinitodersystemd) anvisieren, können Sie Ihr gesamtes Betriebssystem destabilisieren oder zum Absturz bringen. Überprüfen Sie immer die Ziel-PID mitps, bevor Siekillalloderpkillmit breiten Mustern verwenden.
Ein sicherer Arbeitsablauf zur Prozessverwaltung
Wenn Sie ein außer Kontrolle geratenes Programm beheben, befolgen Sie diesen systematischen Ansatz:
- Identifizieren: Verwenden Sie
ps aux | grep <prozessname>, um die Prozess-PID zu finden und ihren Status zu überprüfen. - Zustand prüfen: Untersuchen Sie die Spalte
STAT. Wenn sieZist, ist der Prozess bereits tot; Sie benötigen den Elternprozess, um ihn zu entfernen. Überprüfen Sie diePPID, bevor Sie etwas beenden. - Ordentlichen Stopp versuchen: Senden Sie
SIGTERM(Standardkill PID). Warten Sie einige Sekunden. - Stopp überprüfen: Führen Sie
pserneut aus. - Bei Bedarf gewaltsam stoppen: Wenn der Prozess bestehen bleibt und Sie das Risiko verstehen, senden Sie
SIGKILLmitkill -9 PID.
Die praktische Gewohnheit ist einfach: Identifizieren Sie die PID, überprüfen Sie den Besitzer und Zustand, senden Sie das sanfteste nützliche Signal und überprüfen Sie dann das Ergebnis. Das hält die Prozessbereinigung vorhersehbar und reduziert die Wahrscheinlichkeit, die falsche Arbeitslast zu stoppen.