Einführung
Die Prozessverwaltung ist ein grundlegendes Aspekt der Linux-Systemadministration. Jedes Programm oder jeder Befehl, den Sie in Linux ausführen, erstellt einen Prozess, und die Überwachung dieser Prozesse ist für die Aufrechterhaltung der Systemleistung und die Fehlerbehebung unerlässlich.
Dieser Lab (LabEx) wird Sie durch die Beherrschung des ps-Befehls führen, einem leistungsstarken Tool zur Überwachung und Verwaltung der auf einem Linux-System laufenden Prozesse. Indem Sie verstehen, wie Sie den ps-Befehl und seine verschiedenen Optionen verwenden, erhalten Sie wertvolle Einblicke in das, was zu jedem Zeitpunkt auf Ihrem System passiert.
Während dieses Labs werden Sie lernen, wie Sie Prozesse in verschiedenen Formaten anzeigen, alle Systemprozesse anzeigen und die detaillierten Informationen verstehen, die ps über jeden Prozess liefern kann.
Grundlegende Prozessinformationen verstehen
In Linux wird jedes laufende Programm oder jeder laufende Befehl durch einen Prozess repräsentiert. Jeder Prozess hat einen eindeutigen Bezeichner, den sogenannten Prozess-ID (PID). Mit dem ps-Befehl können Sie diese Prozesse anzeigen und Informationen über sie erhalten.
Beginnen wir mit der Erkundung der grundlegenden Verwendung des ps-Befehls.
Grundlegender ps-Befehl
Öffnen Sie Ihr Terminal in der LabEx-Umgebung. Sie sollten im Verzeichnis
~/projectstarten.Geben Sie den folgenden Befehl ein und drücken Sie die Eingabetaste:
ps
- Sie werden eine Ausgabe ähnlich der folgenden sehen:
PID TTY TIME CMD
188 pts/0 00:00:00 zsh
449 pts/0 00:00:00 ps
Lassen Sie uns verstehen, was diese Ausgabe bedeutet:
PID: Prozess-ID, eine eindeutige Nummer, die jedem Prozess zugewiesen wirdTTY: Terminaltyp, der angibt, auf welchem Terminal der Prozess läuftTIME: Die Menge an CPU-Zeit, die der Prozess verwendet hatCMD: Der Befehl, der den Prozess gestartet hat
In diesem Beispiel können Sie sehen:
- Den
zsh-Shell-Prozess (Ihre aktuelle Terminalsitzung) - Den
ps-Befehl, den Sie gerade ausgeführt haben
Der Standard-ps-Befehl zeigt nur die Prozesse an, die mit Ihrer aktuellen Terminalsitzung verbunden sind. Dies ist nützlich, um schnell zu überprüfen, welche Befehle Sie kürzlich ausgeführt haben, aber es gibt Ihnen keine vollständige Übersicht darüber, was auf Ihrem System passiert.
Versuchen Sie, einen anderen Befehl auszuführen und führen Sie dann erneut ps aus, um zu sehen, wie sich die Ausgabe ändert:
echo "Hello, world"
ps
Sie werden feststellen, dass der echo-Befehl nicht in der Prozessliste erscheint. Dies liegt daran, dass er so schnell gestartet und beendet wurde, dass er zum Zeitpunkt der Ausführung des ps-Befehls bereits beendet war.
Anzeigen aller Systemprozesse
Im vorherigen Schritt haben Sie gelernt, dass der grundlegende ps-Befehl nur die Prozesse anzeigt, die mit Ihrem aktuellen Terminal verbunden sind. Ein typisches Linux-System hat jedoch viele Prozesse, die gleichzeitig laufen, von denen die meisten nicht direkt mit Ihrer Terminalsitzung verbunden sind.
Um eine vollständigeres Bild davon zu bekommen, was auf Ihrem System passiert, können Sie die Option -e mit dem ps-Befehl verwenden.
Verwenden von ps -e zur Anzeige aller Prozesse
- Geben Sie in Ihrem Terminal den folgenden Befehl ein und drücken Sie die Eingabetaste:
ps -e
- Sie werden eine viel längere Liste von Prozessen sehen, ähnlich der folgenden:
PID TTY TIME CMD
1 ? 00:00:00 init.sh
22 ? 00:00:00 supervisord
23 ? 00:00:00 sshd
32 ? 00:00:00 dbus-daemon
35 ? 00:00:00 xfce4-session
···
Diese Ausgabe zeigt alle auf dem System laufenden Prozesse an, nicht nur die, die mit Ihrem Terminal verbunden sind. Beachten Sie, dass viele Prozesse in der Spalte TTY ein ? haben. Dies zeigt an, dass diese Prozesse mit keinem Terminal verbunden sind.
Systemprozesse verstehen
Viele der Prozesse, die Sie sehen, sind Systemdienste, die im Hintergrund laufen. Beispielsweise:
init.sh(PID 1) ist der erste Prozess, der beim Booten des Systems gestartet wirdsupervisordist ein Prozesssteuerungssystemsshdist der SSH-Server-Daemondbus-daemonist der D-Bus-Nachrichtenbus-Daemonxfce4-sessionist Teil der Xfce-Desktopumgebung
Diese Prozesse übernehmen verschiedene Systemfunktionen und stellen die Dienste bereit, die Ihr Linux-System nutzbar machen.
Zählen der Anzahl der Prozesse
Wenn Sie wissen möchten, wie viele Prozesse derzeit auf Ihrem System laufen, können Sie die Ausgabe von ps -e an den wc-Befehl weiterleiten:
ps -e | wc -l
Die angezeigte Zahl stellt die Gesamtzahl der auf Ihrem System laufenden Prozesse dar, plus eine Zeile für die Kopfzeile.
Anzeigen detaillierter Prozessinformationen
Nachdem Sie nun alle auf Ihrem System laufenden Prozesse anzeigen können, lernen wir, wie Sie detailliertere Informationen zu jedem Prozess erhalten können. Die Option -f für den ps-Befehl liefert eine "vollständige Formatierung" mit zusätzlichen Details.
Verwenden von ps -ef für detaillierte Informationen
- Geben Sie in Ihrem Terminal den folgenden Befehl ein und drücken Sie die Eingabetaste:
ps -ef
- Sie werden eine Ausgabe ähnlich der folgenden sehen:
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 16:45 ? 00:00:00 /bin/bash /etc/shiyanlou/sbin/init.sh
root 22 1 0 16:45 ? 00:00:00 /usr/bin/python3 /usr/bin/supervisord -n
root 23 22 0 16:45 ? 00:00:00 sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups
labex 188 187 0 16:46 pts/0 00:00:00 -zsh
labex 677 188 0 16:55 pts/0 00:00:00 ps -ef
Dieses Format liefert viel detailliertere Informationen zu jedem Prozess:
UID: Benutzer-ID des ProzessbesitzersPID: Prozess-IDPPID: Eltern-Prozess-ID (der Prozess, der diesen gestartet hat)C: CPU-AuslastungSTIME: Startzeit des ProzessesTTY: Terminal, das mit dem Prozess verbunden istTIME: Von dem Prozess verwendete CPU-ZeitCMD: Vollständiger Befehl mit seinen Argumenten
Verständnis von Prozessbeziehungen
Die Spalte PPID ist besonders nützlich, um zu verstehen, wie Prozesse miteinander in Beziehung stehen. Jeder Prozess (außer dem allerersten) wird von einem anderen Prozess gestartet, was eine Eltern-Kind-Beziehung schafft.
Beispielsweise in der obigen Ausgabe:
- Der Prozess mit der PID 1 (
init.sh) hat eine PPID von 0 (es ist der erste Prozess) - Der Prozess mit der PID 22 (
supervisord) hat eine PPID von 1 (er wurde voninit.shgestartet) - Der Prozess mit der PID 23 (
sshd) hat eine PPID von 22 (er wurde vonsupervisordgestartet)
Diese hierarchische Beziehung bildet einen "Prozessbaum", den Sie mit speziellen Tools wie pstree visualisieren können (dies wird in diesem Lab nicht behandelt).
Filtern von Prozessinformationen
Sie können ps mit grep kombinieren, um nach bestimmten Prozessen zu filtern. Beispielsweise, um alle Prozesse zu finden, die mit der zsh-Shell in Verbindung stehen:
ps -ef | grep zsh
Dies zeigt Ihnen alle Prozesse, deren Befehlsname "zsh" enthält.
Versuchen Sie, nach anderen Prozessen auf Ihrem System zu suchen:
ps -ef | grep bash
Diese Kombination von ps mit Filtertools macht es zu einem leistungsstarken Befehl für die Systemüberwachung und -fehlersuche.
Sortieren von Prozessinformationen und erweiterte Optionen
Nachdem Sie sich bereits mit grundlegenden Prozessinformationen und detaillierten Listen vertraut gemacht haben, wollen wir nun einige zusätzliche Optionen erkunden, die den ps-Befehl noch nützlicher machen.
Benutzerdefiniertes Format mit ps
Der ps-Befehl ermöglicht es Ihnen, benutzerdefinierte Ausgaben mit spezifischen Informationen zu erstellen, die Sie interessieren. Die Option -o lässt Sie festlegen, welche Spalten angezeigt werden sollen:
ps -eo pid,ppid,cmd,%cpu,%mem --sort=-%cpu
Dieser Befehl zeigt an:
- Prozess-ID (pid)
- Eltern-Prozess-ID (ppid)
- Befehl (cmd)
- CPU-Nutzungsanteil (%cpu)
- Speicher-Nutzungsanteil (%mem)
Der Parameter --sort=-%cpu sortiert die Prozesse nach der CPU-Nutzung in absteigender Reihenfolge (das Minuszeichen vor %cpu gibt die absteigende Reihenfolge an).
Sie sollten eine Ausgabe ähnlich der folgenden sehen:
PID PPID CMD %CPU %MEM
789 788 ps -eo pid,ppid,cmd,%cpu,% 0.0 0.1
188 187 -zsh 0.0 0.1
35 34 xfce4-session 0.0 0.2
32 1 /usr/bin/dbus-daemon --sys 0.0 0.0
23 22 sshd: /usr/sbin/sshd -D [l 0.0 0.1
22 1 /usr/bin/python3 /usr/bin/ 0.0 0.2
1 0 /bin/bash /etc/shiyanlou/s 0.0 0.0
Finden von speicherintensiven Prozessen
Wenn Sie herausfinden möchten, welche Prozesse am meisten Speicher verbrauchen, können Sie stattdessen nach der Speichernutzung sortieren:
ps -eo pid,user,cmd,%mem --sort=-%mem | head -n 6
Dieser Befehl zeigt die fünf Prozesse mit der höchsten Speichernutzung (plus die Kopfzeile) an, zusammen mit ihrer PID, dem Benutzer, dem Befehl und dem Speicher-Nutzungsanteil.
Verständnis von Prozesszuständen
Prozesse können sich in verschiedenen Zuständen befinden. Schauen wir uns diese Informationen an:
ps -eo pid,stat,cmd
Die Spalte STAT zeigt den Prozesszustand mithilfe von Ein-Buchstaben-Codes an:
R: Läuft oder kann laufenS: Schläft in einer unterbrechbaren WartezeitD: Ununterbrechbarer Schlaf (normalerweise IO)Z: Zombie-ProzessT: Angehalten oder wird überwacht
Zusätzliche Zeichen können nach dem Statusbuchstaben erscheinen:
<: Hohe PrioritätN: Niedrige Prioritäts: Sitzungsleiter+: In der Vordergrund-Prozessgruppe
Diese Informationen helfen Ihnen, zu verstehen, was die Prozesse zu einem bestimmten Zeitpunkt tun.
Hierarchische Ansicht mit pstree
Obwohl pstree nicht Teil des ps-Befehls selbst ist, bietet es eine visuelle Darstellung der Prozesshierarchie:
pstree
Dies zeigt die Beziehungen zwischen den Prozessen in einem baumartigen Format an, wodurch es einfacher wird, zu verstehen, wie die Prozesse miteinander in Verbindung stehen.
Echtzeit-Überwachung von Prozessen
Während der ps-Befehl einen Momentaufnahme der laufenden Prozesse liefert, müssen Sie manchmal Prozesse kontinuierlich überwachen. In diesem Schritt werden wir Tools für die Echtzeit-Überwachung von Prozessen kennenlernen.
Verwenden des top-Befehls
Der top-Befehl bietet eine dynamische Echtzeitansicht des laufenden Systems. Er zeigt sowohl Systemzusammenfassungsinformationen als auch eine Liste der aktuell vom Linux-Kernel verwalteten Prozesse oder Threads an.
Führen Sie den folgenden Befehl aus:
top
Sie werden etwas wie Folgendes sehen:
top - 17:15:23 up 30 min, 1 user, load average: 0.00, 0.01, 0.05
Tasks: 31 total, 1 running, 30 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.0 us, 0.3 sy, 0.0 ni, 99.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
MiB Mem : 1975.1 total, 1558.7 free, 180.4 used, 236.1 buff/cache
MiB Swap: 975.0 total, 975.0 free, 0.0 used. 1651.3 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1 root 20 0 8988 3208 2556 S 0.0 0.2 0:00.07 init.sh
22 root 20 0 39528 8596 6088 S 0.0 0.4 0:00.20 supervisord
23 root 20 0 12128 6788 5864 S 0.0 0.3 0:00.00 sshd
...
Die Ausgabe ist in zwei Teile aufgeteilt:
- Systemzusammenfassung (erste 5 Zeilen)
- Prozessliste (standardmäßig sortiert nach CPU-Nutzung)
Um top zu beenden, drücken Sie die Taste q.
Verständnis der top-Ausgabe
Die Systemzusammenfassung liefert:
- Systemlaufzeit und Lastdurchschnitte
- Anzahl der Prozesse nach Zustand (laufend, schlafend, angehalten, Zombie)
- Aufschlüsselung der CPU-Nutzung
- Speicher- und Swap-Nutzung
Die Prozessliste zeigt:
- PID: Prozess-ID
- USER: Benutzerbesitzer
- PR: Priorität
- NI: Nice-Wert
- VIRT: Verwendeter virtueller Speicher
- RES: Verwendeter Resident-Speicher
- SHR: Gemeinsam genutzter Speicher
- S: Prozesszustand
- %CPU: CPU-Nutzung
- %MEM: Speichernutzung
- TIME+: Verbrauchte CPU-Zeit
- COMMAND: Befehlsname
Interaktive Befehle in top
Während top läuft, können Sie verschiedene Tastaturbefehle verwenden, um mit ihm zu interagieren:
- Drücken Sie
M, um nach Speichernutzung zu sortieren - Drücken Sie
P, um nach CPU-Nutzung zu sortieren - Drücken Sie
kund geben Sie dann eine PID ein, um einen Prozess zu beenden - Drücken Sie
hfür die Hilfe
Versuchen Sie, während der Ausführung von top die Taste M zu drücken, um die Prozesse nach Speichernutzung sortiert zu sehen.
Verwenden des watch-Befehls mit ps
Ein anderer Ansatz zur Echtzeitüberwachung ist die Verwendung des watch-Befehls mit ps. Dieser führt einen Befehl in regelmäßigen Abständen aus und zeigt die Ausgabe an, sodass Sie die Änderungen im Laufe der Zeit beobachten können.
watch -n 1 'ps -eo pid,ppid,cmd,%cpu,%mem --sort=-%cpu | head -n 6'
Dieser Befehl aktualisiert die Anzeige alle 1 Sekunde und zeigt die fünf Prozesse mit der höchsten CPU-Nutzung an.
Um watch zu beenden, drücken Sie Ctrl+C.
Die Kombination von ps mit Tools wie watch gibt Ihnen leistungsstarke Möglichkeiten zur Echtzeitüberwachung der Prozesse auf Ihrem System.
Zusammenfassung
Im Laufe dieses Labs haben Sie wichtige Fähigkeiten zur Überwachung und Verwaltung von Prozessen in einem Linux-System mit dem ps-Befehl und verwandten Tools gelernt. Hier ist eine Zusammenfassung dessen, was Sie behandelt haben:
Grundlegende Prozessinformationen: Sie haben gelernt, den grundlegenden
ps-Befehl zu verwenden, um die Prozesse anzuzeigen, die mit Ihrer aktuellen Terminal-Sitzung verbunden sind. Sie verstehen das grundlegende Ausgabeformat, einschließlich PID, TTY, TIME und CMD.Systemweite Prozessanzeige: Sie haben gelernt,
ps -ezu nutzen, um alle auf dem System laufenden Prozesse anzuzeigen, nicht nur diejenigen, die mit Ihrem Terminal verbunden sind.Detaillierte Prozessinformationen: Sie haben den
ps -ef-Befehl untersucht, um detaillierte Informationen über Prozesse zu erhalten, einschließlich Benutzer-IDs, Eltern-Prozess-IDs, Startzeiten und vollständigen Befehlszeilen.Erweiterte Sortierung und Formatierung: Sie haben entdeckt, wie Sie mit
ps -eound dem--sort-Parameter benutzerdefinierte Ausgaben mit bestimmten Spalten und Sortieroptionen erstellen können.Echtzeitüberwachung: Sie haben gelernt, den
top-Befehl für die dynamische Echtzeit-Anzeige von Prozessen zu nutzen und wie Siepsmit anderen Tools wiewatchkombinieren können, um Prozesse kontinuierlich zu überwachen.
Diese Fähigkeiten sind grundlegend für die Systemadministration, die Fehlerbehebung und die Leistungsüberwachung in Linux-Umgebungen. Das Verständnis, welche Prozesse laufen und wie sie die Systemressourcen verbrauchen, ist unerlässlich für die Aufrechterhaltung der Systemgesundheit und die Diagnose von Problemen.
Wenn Sie weiterhin mit Linux-Systemen arbeiten, wird die Fähigkeit, Prozesse effektiv zu überwachen und zu verwalten, eine Ihrer wertvollsten Fähigkeiten sein.



