Anzeige von Linux-Prozessen

LinuxBeginner
Jetzt üben

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

  1. Öffnen Sie Ihr Terminal in der LabEx-Umgebung. Sie sollten im Verzeichnis ~/project starten.

  2. Geben Sie den folgenden Befehl ein und drücken Sie die Eingabetaste:

ps
  1. 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 wird
  • TTY: Terminaltyp, der angibt, auf welchem Terminal der Prozess läuft
  • TIME: Die Menge an CPU-Zeit, die der Prozess verwendet hat
  • CMD: 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

  1. Geben Sie in Ihrem Terminal den folgenden Befehl ein und drücken Sie die Eingabetaste:
ps -e
  1. 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 wird
  • supervisord ist ein Prozesssteuerungssystem
  • sshd ist der SSH-Server-Daemon
  • dbus-daemon ist der D-Bus-Nachrichtenbus-Daemon
  • xfce4-session ist 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

  1. Geben Sie in Ihrem Terminal den folgenden Befehl ein und drücken Sie die Eingabetaste:
ps -ef
  1. 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 Prozessbesitzers
  • PID: Prozess-ID
  • PPID: Eltern-Prozess-ID (der Prozess, der diesen gestartet hat)
  • C: CPU-Auslastung
  • STIME: Startzeit des Prozesses
  • TTY: Terminal, das mit dem Prozess verbunden ist
  • TIME: Von dem Prozess verwendete CPU-Zeit
  • CMD: 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 von init.sh gestartet)
  • Der Prozess mit der PID 23 (sshd) hat eine PPID von 22 (er wurde von supervisord gestartet)

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 laufen
  • S: Schläft in einer unterbrechbaren Wartezeit
  • D: Ununterbrechbarer Schlaf (normalerweise IO)
  • Z: Zombie-Prozess
  • T: Angehalten oder wird überwacht

Zusätzliche Zeichen können nach dem Statusbuchstaben erscheinen:

  • <: Hohe Priorität
  • N: Niedrige Priorität
  • s: 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:

  1. Systemzusammenfassung (erste 5 Zeilen)
  2. 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 k und geben Sie dann eine PID ein, um einen Prozess zu beenden
  • Drücken Sie h fü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:

  1. 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.

  2. Systemweite Prozessanzeige: Sie haben gelernt, ps -e zu nutzen, um alle auf dem System laufenden Prozesse anzuzeigen, nicht nur diejenigen, die mit Ihrem Terminal verbunden sind.

  3. 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.

  4. Erweiterte Sortierung und Formatierung: Sie haben entdeckt, wie Sie mit ps -eo und dem --sort-Parameter benutzerdefinierte Ausgaben mit bestimmten Spalten und Sortieroptionen erstellen können.

  5. Echtzeitüberwachung: Sie haben gelernt, den top-Befehl für die dynamische Echtzeit-Anzeige von Prozessen zu nutzen und wie Sie ps mit anderen Tools wie watch kombinieren 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.