Harting Development

Linux-Prozesse anzeigen: Einblicke in laufende Aufgaben gewinnen

Lukas Fuchs vor 8 Monaten in  Entwicklung 3 Minuten Lesedauer

Befehle zum Anzeigen von Prozessen

Um Einblicke in die laufenden Aufgaben auf deinem Linux-System zu erhalten, stehen dir mehrere Befehle zur Verfügung. Jeder Befehl bietet unterschiedliche Informationen und eignet sich für bestimmte Zwecke.

ps-Befehl

Der Befehl ps ist das grundlegende Werkzeug zum Anzeigen von Prozessinformationen. Er listet alle aktuell ausgeführten Prozesse auf und bietet grundlegende Details wie die Prozess-ID (PID), den Benutzer, der den Prozess gestartet hat, den Befehl und den aktuellen Status.

top-Befehl

Der Befehl top ist ein interaktives Tool, das eine dynamische Echtzeitansicht laufender Prozesse bietet. Er zeigt eine sortierte Liste der Prozesse basierend auf verschiedenen Metriken wie CPU-Auslastung, Arbeitsspeicherauslastung oder Ausführungszeit an.

pstree-Befehl

Der Befehl pstree visualisiert die Prozesshierarchie in einer baumartigen Struktur. Dies kann hilfreich sein, um Abhängigkeiten zwischen Prozessen zu identifizieren und Prozessketten zu debuggen.

pidof-Befehl

Der Befehl pidof gibt die PIDs eines oder mehrerer Prozesse zurück, die mit einem bestimmten Befehl oder Muster übereinstimmen. Dies ist nützlich, wenn du nach einem bestimmten Prozess suchst, dessen PID dir nicht bekannt ist.

pidstat-Befehl

Der Befehl pidstat ist ein komplexes Werkzeug, das detaillierte Statistiken über die Ressourcenauslastung von Prozessen liefert. Er kann Informationen wie CPU-Auslastung, Speicherverbrauch, Festplatten-E/A und Netzwerkaktivität bereitstellen.

vmstat-Befehl

Der Befehl vmstat bietet einen Überblick über die Ressourcennutzung des Systems, einschließlich der belegten und freien Arbeitsspeichermenge, der Festplattenaktivität und der CPU-Auslastung. Er kann dir helfen, Engpässe oder Leistungsprobleme zu identifizieren.

Verzeichnisstruktur für Prozessinformationen

Um umfassende Einblicke in laufende Prozesse zu erhalten, kannst du die Verzeichnisstruktur von /proc erkunden. Dieses virtuelle Dateisystem spiegelt wichtige Informationen wider, die mit jedem Prozess verknüpft sind.

Prozess-IDs

Jeder Prozess wird durch eine eindeutige Prozess-ID (PID) gekennzeichnet. Die entsprechenden Verzeichnisse findest du unter /proc/[PID].

Statusinformationen

Die Datei /proc/[PID]/status bietet eine Fülle von Informationen, darunter den aktuellen Status, die Ressourcenbelegung und die Thread-Informationen. Du erhältst hier Aufschluss über:

  • Prozessname und -argumente
  • Prozessstatus (z. B. "sleeping", "running")
  • Speicherbelegung
  • Thread-Stack-Informationen
  • E/A-Statistiken

Task-Informationen

Der Ordner /proc/[PID]/task enthält Informationen zu den einzelnen Threads eines Prozesses. Jeder Thread hat sein eigenes Verzeichnis, das ähnliche Daten wie /proc/[PID]/status enthält, allerdings spezifisch für den jeweiligen Thread.

Andere Dateien

Zusätzlich zu den oben genannten Dateien findest du unter /proc/[PID] weitere Informationen:

  • /proc/[PID]/cwd: Zeigt das aktuelle Arbeitsverzeichnis des Prozesses an
  • /proc/[PID]/environ: Listet die Umgebungsvariablen des Prozesses auf
  • /proc/[PID]/fdinfo: Bietet Informationen zu den geöffneten Dateideskriptoren des Prozesses
  • /proc/[PID]/limits: Zeigt die Ressourcenlimits des Prozesses an

Nutzung

Durch die Navigation durch die Verzeichnisstruktur von /proc kannst du wertvolle Einblicke in laufende Prozesse erhalten. Du kannst Probleme diagnostizieren, Ressourcenverbrauch überwachen und die Leistung optimieren.

Prozessstatus und -flags

In diesem Abschnitt untersuchen wir die verschiedenen Status und Flags, die Prozesse in Linux haben können. Diese Informationen können wertvolle Einblicke in das Verhalten und die Ausführung von Prozessen geben.

Prozessstatus

Der Prozessstatus gibt an, in welchem Zustand sich ein Prozess derzeit befindet:

  • R (Running): Der Prozess läuft und führt Anweisungen aus.
  • S (Sleeping): Der Prozess wartet darauf, dass ein Ereignis eintritt oder auf eine Ressource zugreift.
  • D (Uninterruptible sleep): Der Prozess wartet auf ein Ereignis oder eine Ressource und kann nicht durch Signale unterbrochen werden.
  • Z (Zombie): Der Prozess wurde beendet, aber sein Prozessdatensatz ist noch im Speicher vorhanden.
  • T (Stopped): Der Prozess wurde gestoppt und kann durch ein Signal fortgesetzt werden.

Prozessflags

Zusätzlich zum Status werden jedem Prozess auch eine Reihe von Flags zugewiesen, die sein Verhalten beeinflussen können:

  • DF (Dump core): Wenn der Prozess abstürzt, wird ein Core-Dump erstellt.
  • NF (No file): Der Prozess hat keine offenen Dateideskriptoren.
  • PF (Process group): Der Prozess ist der Leiter einer Prozessgruppe.
  • SF (Session leader): Der Prozess ist der Leiter einer Sitzung.
  • UF (User-mode core dump): Wenn der Prozess abstürzt, wird ein Core-Dump im Benutzermodus erstellt.
  • VF (Virtual memory): Der Prozess hat virtuellen Speicher zugewiesen.

Bedeutung von Prozessstatus und -flags

Die Kombination aus Prozessstatus und -flags kann dir wertvolle Informationen über das Verhalten eines Prozesses liefern:

  • Ein Prozess im Zustand "R" mit gesetztem "PF"-Flag ist beispielsweise der Leiter einer Prozessgruppe.
  • Ein Prozess im Zustand "S" mit gesetztem "NF"-Flag hat keine offenen Dateien und wartet auf Eingabe.

Diese Informationen können dir bei der Fehlerbehebung und Optimierung von Prozessen helfen, indem du identifizierst, warum ein Prozess nicht reagiert oder ungewöhnlich hohe Ressourcen verbraucht.

Benutzer- und Gruppenzuordnung

Beim Anzeigen von Prozessen kannst du auch Informationen zu den damit verbundenen Benutzern und Gruppen abrufen. Dies ist wichtig für das Verständnis der Zugriffsrechte und der Verantwortlichkeiten für laufende Aufgaben.

Benutzer-ID (UID) und effektive Benutzer-ID (EUID)

Jedes Prozess hat eine Benutzer-ID (UID), die den Benutzer identifiziert, der den Prozess gestartet hat. Die effektive Benutzer-ID (EUID) gibt den Benutzer an, der die Berechtigungen des Prozesses hat. In der Regel stimmen UID und EUID überein, es können jedoch Ausnahmen auftreten, wenn der Prozess Berechtigungen eines anderen Benutzers über die Befehle sudo oder su übernommen hat.

Gruppen-ID (GID) und effektive Gruppen-ID (EGID)

Ähnlich wie bei Benutzern verfügt jeder Prozess auch über eine Gruppen-ID (GID), die die Hauptgruppe des Prozesses identifiziert. Die effektive Gruppen-ID (EGID) gibt die Gruppenberechtigungen des Prozesses an. Auch hier stimmen GID und EGID normalerweise überein, können aber durch die Verwendung von Befehlen wie newgrp oder sg verändert werden.

Realer Benutzer, effektiver Benutzer und gespeicherter Benutzer

Zusätzlich zu UID und EUID gibt es auch den realen Benutzer (RUID), der den Benutzer identifiziert, der den Prozess ursprünglich gestartet hat, und den gespeicherten Benutzer (SUID), der den Benutzer identifiziert, der mit den Berechtigungen des Prozesses ausgeführt wird. Diese Informationen können nützlich sein, um die Herkunft eines Prozesses zu ermitteln und potenzielle Sicherheitsprobleme zu identifizieren.

Anzeige von Benutzer- und Gruppeninformationen

Um Benutzer- und Gruppeninformationen zu einem Prozess anzuzeigen, kannst du die folgenden Befehle verwenden:

  • ps aux: Zeigt alle Prozesse mit ausführlichen Informationen an, einschließlich UID, EUID, GID und EGID.
  • id -u: Zeigt die UID des aktuellen Benutzers an.
  • id -g: Zeigt die GID des aktuellen Benutzers an.

Schlussfolgerung

Die Kenntnis der Benutzer- und Gruppenzuordnung von Prozessen ist für das Verständnis der Zugriffsrechte und der Verantwortlichkeiten für laufende Aufgaben unerlässlich. Die bereitgestellten Befehle ermöglichen es dir, diese Informationen einfach abzurufen und so ein umfassenderes Bild des Systemstatus zu erhalten.

Ressourcenverbrauch und Priorität

Wenn du Prozesse überwachst, ist es wichtig, deren Ressourcenverbrauch und Priorität zu berücksichtigen. Diese Informationen können helfen, festzustellen, welche Prozesse möglicherweise Ressourcen beanspruchen oder das System verlangsamen.

CPU-Auslastung

Die CPU-Auslastung gibt an, wie viel Prozessorzeit ein Prozess belegt. Dies kann dir Hinweise darauf geben, welche Prozesse am meisten Rechenleistung beanspruchen. Der Befehl top zeigt die CPU-Auslastung jedes Prozesses in Echtzeit an.

Speicherverbrauch

Der Speicherverbrauch gibt an, wie viel Arbeitsspeicher ein Prozess belegt. Dies kann helfen, Speicherlecks oder Prozesse zu identifizieren, die übermäßigen Speicher belegen. Der Befehl free zeigt die Gesamtspeicherauslastung, einschließlich der von Prozessen verwendeten Menge, an.

E/A-Aktivität

Die E/A-Aktivität gibt an, wie viel Dateneingabe und -ausgabe ein Prozess ausführt. Dies kann hilfreich sein, um Prozesse zu identifizieren, die Festplatten- oder Netzwerkressourcen beanspruchen. Der Befehl iostat zeigt die E/A-Aktivität nach Gerät an.

Ausführungspriorität

Die Ausführungspriorität gibt an, in welcher Reihenfolge ein Prozess von der CPU ausgeführt wird. Prozesse mit höherer Priorität werden vor Prozessen mit niedrigerer Priorität ausgeführt. Du kannst den Befehl nice verwenden, um die Priorität eines Prozesses anzupassen.

Prioritätsanpassung

Wenn du feststellst, dass ein Prozess zu viele Ressourcen beansprucht oder das System verlangsamt, kannst du seine Priorität anpassen, um die Leistung zu verbessern. Dies kann mit dem Befehl renice erfolgen.

Überwachung in Echtzeit

Du kannst auch Tools für die Echtzeitüberwachung von Prozessen verwenden. Beispielsweise zeigt die grafische Oberfläche von htop den Ressourcenverbrauch und die Priorität von Prozessen in Echtzeit an.

Verwendung von Filtern und Optionen

Um deine Suche nach Prozessen zu verfeinern, kannst du Filter und Optionen verwenden. Diese bieten dir eine präzisere Kontrolle über die angezeigten Informationen.

Prozess-IDs und Namen filtern

Um einen bestimmten Prozess nach seiner ID (PID) zu suchen, verwende die Option -p. Beispiel:

ps -p 1234

Du kannst auch nach dem Prozessnamen filtern, indem du die Option -C verwendest. Dies ist nützlich, um alle laufenden Prozesse mit einem bestimmten Namen aufzulisten. Beispiel:

ps -C firefox

Benutzer filtern

Um Prozesse anzuzeigen, die einem bestimmten Benutzer gehören, verwende die Option -u. Dies kann dir helfen, herauszufinden, welche Prozesse ein bestimmter Benutzer ausführt. Beispiel:

ps -u alice

Status filtern

Die Option -f ermöglicht es dir, Prozesse nach Status zu filtern. Beispielsweise kannst du alle schlafenden Prozesse mit ps -f S auflisten. Die möglichen Status sind:

  • R: Ausführbar
  • S: Schlafend
  • D: Ununterbrochen schlafend
  • T: Beendet
  • Z: Zombie

Mehrere Filter kombinieren

Du kannst mehrere Filter kombinieren, um deine Suche weiter einzuschränken. Beispielsweise kannst du alle Prozesse eines bestimmten Benutzers mit einem bestimmten Namen auflisten:

ps -u alice -C firefox

Zusätzliche Optionen

Neben Filtern bietet ps auch zusätzliche Optionen, um die angezeigten Informationen anzupassen.

Vollständigen Befehl anzeigen lassen

Um den vollständigen Befehl anzuzeigen, der einen Prozess gestartet hat, verwende die Option -f. Dies kann hilfreich sein, um zu verstehen, welche Parameter an den Prozess übergeben wurden. Beispiel:

ps -f

Umgebungsvariablen anzeigen lassen

Um Umgebungsvariablen anzuzeigen, die für einen Prozess gesetzt sind, verwende die Option -e. Dies kann dir dabei helfen, die Konfiguration eines Prozesses zu verstehen. Beispiel:

ps -e

Priorität und Ressourcenverbrauch anzeigen lassen

Um die Priorität und den Ressourcenverbrauch eines Prozesses anzuzeigen, verwende die Optionen -l und -c. Dies kann dir helfen, Systemressourcen zu überwachen und Engpässe zu identifizieren. Beispiel:

ps -l
ps -c

Überwachung von Prozessen in Echtzeit

Um Prozesse in Echtzeit zu überwachen, stehen dir mehrere Tools zur Verfügung. Eines der vielseitigsten ist htop. Es bietet eine interaktive und dynamische Ansicht aller laufenden Prozesse auf deinem System.

htop verwenden

Um htop zu verwenden, öffne ein Terminal und gib Folgendes ein:

sudo apt install htop (für Debian-basierte Systeme)
sudo yum install htop (für Red Hat-basierte Systeme)

Sobald installiert, kannst du htop über das Terminal starten:

htop

Ansicht und Interaktivität

Die htop-Oberfläche zeigt eine Liste aller laufenden Prozesse an, sortiert nach CPU-Auslastung. Es bietet auch Informationen zu Speicherverbrauch, Auslastung der Ein- und Ausgabegeräte und anderen relevanten Metriken.

Du kannst Tastenkombinationen verwenden, um mit Prozessen zu interagieren:

  • F6: Filtere Prozesse
  • F7: Ändere die Darstellung der Sortierung
  • F8: Zeige die Spaltenauswahl an

Prozessdetails aufrufen

Um detaillierte Informationen zu einem bestimmten Prozess anzuzeigen, drücke Enter auf dem hervorgehobenen Prozess. Dies öffnet ein Pop-up-Fenster mit Informationen wie:

  • Befehlszeilenargumente
  • Umgebungsvariablen
  • Dateideskriptoren
  • Stack-Trace

Echtzeitaktualisierungen

htop aktualisiert seine Ansicht kontinuierlich in Echtzeit. Dies ermöglicht die Überwachung von Änderungen in der Prozessauslastung, Ressourcenverbrauch und anderen Metriken. Du kannst die Aktualisierungsrate unter "Einstellungen" anpassen.

Weitere Tools

Zusätzlich zu htop stehen noch weitere Tools zur Überwachung von Prozessen in Echtzeit zur Verfügung:

  • top: Ein grundlegendes Tool, das Echtzeitinformationen zu Prozessen bereitstellt.
  • ps aux: Ein Befehlszeilentool, das eine detaillierte Liste aller laufenden Prozesse anzeigt.
  • Monitorix: Ein webbasiertes Überwachungssystem, das detaillierte Informationen zu Prozessen, Speicher und anderen Systemressourcen liefert.

Fehlerbehebung bei Problemen mit Prozessen

Wenn Prozesse Probleme verursachen, ist eine sorgfältige Untersuchung erforderlich, um die Ursache zu ermitteln und Lösungen zu finden. Dieser Abschnitt behandelt gängige Fehlerbehebungstechniken, die dir helfen, Prozessprobleme zu diagnostizieren und zu beheben.

Gründe für fehlerhafte Prozesse

Probleme mit Prozessen können aus verschiedenen Gründen auftreten, darunter:

  • Falsche Konfiguration
  • Ressourcenknappheit
  • Softwarefehler
  • Malware

Diagnose von Prozessproblemen

Um ein Prozessproblem zu diagnostizieren, kannst du folgende Schritte ausführen:

  • Protokolle prüfen: Überprüfe die Systemprotokolle, z. B. /var/log/syslog und /var/log/kern.log, auf Fehlermeldungen oder Warnungen im Zusammenhang mit dem Prozess.
  • Prozessinformationen anzeigen: Verwende Befehle wie ps, top oder uptime (unter macOS), um den Status, den Ressourcenverbrauch und andere Informationen über den Prozess anzuzeigen.
  • Ressourcenüberwachung: Überwache die Auslastung von CPU, Speicher und Netzwerk, um festzustellen, ob der Prozess übermäßige Ressourcen verbraucht.
  • Abhängigkeiten prüfen: Verwende Tools wie lsof (unter Linux) oder launchctl list (unter macOS), um die Abhängigkeiten des Prozesses zu ermitteln und sicherzustellen, dass sie ordnungsgemäß geladen und ausgeführt werden.

Beheben von Prozessproblemen

Sobald die Ursache des Prozessproblems ermittelt wurde, kannst du folgende Schritte unternehmen, um es zu beheben:

  • Konfiguration anpassen: Überprüfe die Prozesskonfiguration und nimm bei Bedarf Änderungen vor.
  • Ressourcen zuweisen: Erhöhe ggf. die Ressourcenzuweisung für den Prozess.
  • Software aktualisieren: Aktualisiere den Prozess oder die zugehörige Software auf die neueste Version.
  • Malware entfernen: Führe einen Malware-Scan durch und entferne alle erkannten Bedrohungen.
  • Prozess neu starten: Versuche, den Prozess neu zu starten, um mögliche Fehler zu beheben.
  • Prozess beenden: Als letzten Ausweg kannst du den Prozess mit dem Befehl kill oder killall (für alle Instanzen des Prozesses) beenden.

Tools zur Prozessüberwachung

Neben den integrierten Befehlen gibt es auch eine Reihe von Tools zur Prozessüberwachung, die erweiterte Funktionen bieten. Dazu gehören:

  • Prometheus: Ein Open-Source-Überwachungssystem, das Prozessmetriken sammelt und visualisiert.
  • Grafana: Ein Open-Source-Visualisierungswerkzeug, das Prozessdaten in Echtzeit darstellt.
  • Zabbix: Ein kommerzielles Überwachungssystem, das erweiterte Prozessüberwachungsfunktionen bietet.

Fazit

Durch das Befolgen der in diesem Abschnitt beschriebenen Schritte kannst du Prozessprobleme effektiv diagnostizieren und beheben und sicherstellen, dass deine Prozesse reibungslos und effizient laufen.

Erweitertes Prozessmanagement

Neben den grundlegenden Befehlen und Konzepten bietet Linux eine Vielzahl erweiterter Tools und Techniken zur Verwaltung von Prozessen. Diese Tools ermöglichen es dir, tiefer in die Funktionsweise deiner Prozesse einzutauchen, potenzielle Probleme zu identifizieren und die Leistung deines Systems zu optimieren.

Prozesshierarchien

In Linux ist jeder Prozess Teil einer Hierarchie. Der Root-Prozess, bekannt als init, ist die Wurzel dieser Hierarchie und alle anderen Prozesse sind seine Nachkommen. Mit dem Befehl pstree -a kannst du dir diese Hierarchie grafisch darstellen lassen. Dies kann dir helfen, Abhängigkeiten zwischen Prozessen zu erkennen und Engpässe zu identifizieren.

Prozess-Priorität und CPU-Affinität

Jeder Prozess hat eine Priorität, die bestimmt, wie viel CPU-Zeit er erhält. Du kannst die Priorität eines Prozesses mit dem Befehl nice -n ändern. Eine niedrigere Priorität (-20 bis 19) gibt dem Prozess weniger CPU-Zeit, während eine höhere Priorität (20 bis 139) ihm mehr CPU-Zeit gibt.

Zusätzlich kannst du mit der CPU-Affinität festlegen, auf welchen CPU-Kernen ein Prozess ausgeführt werden kann. Dies kann hilfreich sein, um die Leistung zu verbessern, indem Prozesse auf bestimmte Kerne verteilt werden. Du kannst die CPU-Affinität mit dem Befehl taskset -cp festlegen.

Prozess-Scheduling

Der Linux-Kernel verwendet einen Scheduler, um zu steuern, welche Prozesse ausgeführt werden. Der Standard-Scheduler ist der Completely Fair Scheduler (CFS). Du kannst den Scheduler mit dem Befehl schedtool ändern. Es stehen verschiedene Scheduler zur Verfügung, die jeweils unterschiedliche Strategien zur Zuweisung von CPU-Zeit verwenden.

Prozess-Überwachung und -Aufzeichnung

Um Prozesse in Echtzeit zu überwachen, kannst du Tools wie top, htop oder psutil verwenden. Diese Tools bieten eine Echtzeitansicht der laufenden Prozesse, einschließlich ihrer CPU- und Speichernutzung.

Du kannst auch Prozesse aufzeichnen, um deren Verhalten zu analysieren. Tools wie strace, ltrace und perf ermöglichen es dir, Systemaufrufe, Bibliotheksfunktionen und sogar Anweisungen auf niedriger Ebene aufzuzeichnen. Dies kann dir helfen, Leistungsprobleme zu identifizieren und Fehler zu beheben.

Ressourcenverwaltung und Cgroups

Control Groups (Cgroups) sind ein Kernel-Feature, das es dir ermöglicht, Ressourcen wie CPU, Speicher und E/A für Gruppen von Prozessen zu verwalten. Dies kann hilfreich sein, um die Ressourcenzuweisung zu begrenzen, die Stabilität zu verbessern und die Sicherheit zu erhöhen.

Du kannst Cgroups mit Tools wie cgcreate, cgexec und cgstats verwalten. Weitere Informationen findest du in der Cgroups-Dokumentation.

Folge uns

Neue Posts

Beliebte Posts