GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Prozessüberwachung unter Linux

Einführung

In diesem Artikel werden wir die gängigsten Befehle mit Beispielen diskutieren, die in der Prozessüberwachung in Linux-Systemen verwendet werden, wie z. B. :

  • ps
  • oben
  • top
  • lsof

1. p.s.

Wie wir alle wissen, ist Linux ein Multitasking- und Mehrbenutzersystem. So können mehrere Prozesse gleichzeitig ausgeführt werden, ohne sich gegenseitig zu stören. Prozess ist eines der wichtigen Grundkonzepte des Linux-Betriebssystems. Ein Prozess ist eine ausführende Instanz eines Programms und führt verschiedene Aufgaben innerhalb des Betriebssystems aus.

Linux stellt uns ein Dienstprogramm namens ps zur Verfügung zum Anzeigen von Informationen zu den Prozessen auf einem System, das als Abkürzung für „Prozessstatus“ steht Der Befehl ps wird verwendet, um die aktuell laufenden Prozesse und ihre PIDs zusammen mit einigen anderen Informationen aufzulisten, die von verschiedenen Optionen abhängen. Es liest die Prozessinformationen aus den virtuellen Dateien in /proc Dateisystem. /proc enthält virtuelle Dateien, deshalb wird es als virtuelles Dateisystem bezeichnet.

ps bietet zahlreiche Optionen, um die Ausgabe nach unseren Bedürfnissen zu manipulieren.

Syntax :

ps [options]

Optionen für den ps-Befehl:

1- Einfache Prozessauswahl:

Zeigt die Prozesse für die aktuelle Shell

Das Ergebnis enthält vier Spalten mit Informationen.
Woher,
PID – die eindeutige Prozess-ID
TTY – Terminaltyp, an dem der Benutzer angemeldet ist
ZEIT – CPU-Menge in Minuten und Sekunden, die der Prozess ausgeführt wurde
CMD – Name des Befehls, der den Prozess gestartet hat.

Hinweis – Manchmal, wenn wir ps ausführen Befehl, zeigt es TIME als 00:00:00 an. Es ist nichts anderes als die gesamte kumulierte CPU-Auslastungszeit für einen beliebigen Prozess, und 00:00:00 zeigt an, dass der Kernel bis jetzt keine CPU-Zeit angegeben hat. Im obigen Beispiel haben wir festgestellt, dass für bash keine CPU-Zeit angegeben wurde. Dies liegt daran, dass Bash nur ein übergeordneter Prozess für verschiedene Prozesse ist, die Bash für ihre Ausführung benötigen, und Bash selbst verbraucht bis jetzt keine CPU-Zeit.

2. Prozesse anzeigen:

Alle laufenden Prozesse anzeigen, verwenden Sie eine der folgenden Optionen mit ps –

# ps -A
# ps -e
3. Prozesse anzeigen, die keinem Terminal zugeordnet sind:

Alle Prozesse anzeigen, außer Sitzungsleitern und Prozessen, die keinem Terminal zugeordnet sind.

# ps -a

Hinweis – Sie denken vielleicht, was ist Sitzungsleiter? Jeder Prozessgruppe wird eine eigene Sitzung zugeordnet. Der Sitzungsleiter ist also ein Prozess, der andere Prozesse anstößt. Die Prozess-ID des ersten Prozesses einer Sitzung ist ähnlich wie die Sitzungs-ID.

4. Alle Prozesse außer Sitzungsleiter anzeigen:
# ps -d

5. Alle Prozesse anzeigen, außer denen, die die angegebenen Bedingungen erfüllen (annulliert die Auswahl) :
Beispiel – Wenn Sie nur Sitzungsleiter und Prozesse sehen möchten, die keinem Terminal zugeordnet sind. Führen Sie dann

aus
# ps -a -N
or
# ps -a --deselect

6. Alle mit diesem Terminal verbundenen Prozesse anzeigen:

# ps -T

7. Alle laufenden Prozesse anzeigen:

# ps -r

8. Alle Prozesse anzeigen, die Ihnen gehören: Verarbeitet d. h. die gleiche EUID wie ps, was den Ausführenden des ps-Befehls bedeutet, in diesem Fall root

# ps -x

Prozessauswahl nach Liste

Hier werden wir besprechen, wie Sie die spezifische Prozessliste mit Hilfe des Befehls ps erhalten. Diese Optionen akzeptieren ein einzelnes Argument in Form einer durch Leerzeichen oder Kommas getrennten Liste. Sie können mehrfach verwendet werden.
Zum Beispiel: ps -p „1 2“ -p 3,4

  1. Wählen Sie den Prozess anhand des Befehlsnamens aus. Dadurch werden die Prozesse ausgewählt, deren ausführbarer Name in cmdlist angegeben ist. Es besteht die Möglichkeit, dass Sie die Prozess-ID nicht kennen und mit diesem Befehl ist die Suche einfacher.

Syntax: ps -C Befehlsname

Beispiel :

[root@unixcop ~]# ps -C dhclient
  PID TTY          TIME CMD
19815 ?        00:00:00 dhclient

2. Wählen Sie nach Gruppen-ID oder Name aus. Die Gruppen-ID identifiziert die Gruppe des Benutzers, der den Prozess erstellt hat.

Syntax : ps -G group_name
         ps --Group group_name

Example :
[root@unixcop ~]# ps -G root

3. Nach Gruppen-ID anzeigen:

Syntax : ps -g group_id
              ps -group group_id

Jetzt Beispiel :

# ps -g 1

4. Prozess nach Prozess-ID anzeigen.

-Syntax :
ps p process_id
ps -p process_id
ps --pid process_id

Und Beispiele:

[root@unixcop ~]#  ps p 27223
  PID TTY      STAT   TIME COMMAND
27223 ?        Ss     0:01 sshd: root@pts/2

[root@unixcop ~]#  ps -p 27223
  PID TTY          TIME CMD
27223 ?        00:00:01 sshd

[root@unixcop ~]#  ps --pid 27223
  PID TTY          TIME CMD
27223 ?        00:00:01 sshd

Sie können mehrere Prozesse anzeigen, indem Sie mehrere Prozess-IDs angeben, die durch Leerzeichen oder Kommas getrennt sind –
Für Beispiel:

[root@unixcop ~]#  ps -p 1 904 27223
  PID TTY      STAT   TIME COMMAND
    1 ?        Ss     0:13 /usr/lib/systemd/systemd --switched-root --system --d
  904 tty1     Ssl+   1:02 /usr/bin/X -core -noreset :0 -seat seat0 -auth /var/r
27223 ?        Ss     0:01 sshd: root@pts/2

Hier haben wir drei Prozess-IDs erwähnt – 1, 904 und 27223, die durch Leerzeichen getrennt sind.

5. Wählen Sie nach übergeordneter Prozess-ID aus. Mit diesem Befehl können wir alle Prozesse anzeigen, die dem übergeordneten Prozess gehören, mit Ausnahme des übergeordneten Prozesses.

Beispiele :

[root@unixcop ~]# ps -p 766
  PID TTY          TIME CMD
  766 ?        00:00:06 NetworkManager

[root@unixcop ~]# ps --ppid 766
  PID TTY          TIME CMD
19815 ?        00:00:00 dhclient

Im obigen Beispiel Prozess-ID 766 ist NetworkManager zugewiesen und dies ist der übergeordnete Prozess für dhclient mit der Prozess-ID 19815.

6. Zeigen Sie alle Prozesse an, die zu einer beliebigen Sitzungs-ID gehören.

Syntax :
ps -s session_id
ps --sid session_id

Example :
[root@unixcop ~]# ps -s 1248
  PID TTY          TIME CMD
 1248 ?        00:00:00 dbus-daemon
 1276 ?        00:00:00 dconf-service
 1302 ?        00:00:00 gvfsd
 1310 ?        00:00:00 gvfsd-fuse
 1369 ?        00:00:00 gvfs-udisks2-vo
 1400 ?        00:00:00 gvfsd-trash
 1418 ?        00:00:00 gvfs-mtp-volume
 1432 ?        00:00:00 gvfs-gphoto2-vo
 1437 ?        00:00:00 gvfs-afc-volume
 1447 ?        00:00:00 wnck-applet
 1453 ?        00:00:00 notification-ar
 1454 ?        00:00:02 clock-applet

7. Wählen Sie nach tty. Dies wählt die Prozesse aus, die dem erwähnten tty :

zugeordnet sind
The Syntax :
ps t tty
ps -t tty
ps --tty tty

Zum Beispiel :

# ps -t pts/0

8. Wählen Sie nach effektiver Benutzer-ID oder Name aus.

Und die Syntax ist:
ps U Benutzername/ID

ps -U Benutzername/ID

Steuerung des Ausgabeformats

Diese Optionen werden verwendet, um die von ps angezeigten Informationen auszuwählen. Es gibt mehrere Optionen zum Steuern des Ausgabeformats. Diese Option kann mit beliebigen anderen Optionen wie e, u, p, G, g kombiniert werden usw., hängt von unserem Bedarf ab.

1. Verwenden Sie -f um die Liste im Vollformat anzuzeigen.

ps -af

2. Verwenden Sie -F um das Extra-Vollformat anzuzeigen.

ps -F

3. Um den Prozess gemäß dem benutzerdefinierten Format anzuzeigen.

#  ps --formate column_name
#  ps -o column_name
#  ps o column_name

Beispiel :

ps -aN --format cmd,pid,user,ppid

In diesem Beispiel möchte ich den Befehl, die Prozess-ID, den Benutzernamen und die übergeordnete Prozess-ID sehen, also übergebe ich die Argumente cmd, pid, user bzw. ppid.

4. Anzeige im BSD-Jobsteuerungsformat :

ps -j

5. BSD-Langformat anzeigen:

ps l

6. Fügen Sie eine Spalte mit Sicherheitsdaten hinzu.

ps -aM

7. Befehl mit Signalformat anzeigen.

[root@unixcop ~]# ps s 766

8. Benutzerorientiertes Format anzeigen

ps u 1

9. Format des virtuellen Speichers anzeigen

ps v 1

10. Wenn Sie die Umgebung eines beliebigen Befehls sehen möchten. Verwenden Sie dann die Option **e** –

[root@unixcop ~]# ps ev 766
  PID TTY      STAT   TIME  MAJFL   TRS   DRS   RSS %MEM COMMAND
  766 ?        Ssl    0:08     47  2441 545694 10448  1.0 /usr/sbin/NetworkManager --no-daemon LANG=en_US.UTF-8 PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin

11. Zeigen Sie Prozesse an, die den höchsten Speicher verwenden.

ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%mem

12. Drucke einen Prozessbaum

[root@unixcop ~]# ps --forest -C sshd
  PID TTY          TIME CMD
  797 ?        00:00:00 sshd
11680 ?        00:00:03  \_ sshd
16361 ?        00:00:02  \_ sshd

13. Alle Threads für einen bestimmten Prozess auflisten. Verwenden Sie entweder das -T oder -L Option zum Anzeigen von Threads eines Prozesses.

[root@unixcop ~]# ps -C sshd -L
  PID   LWP TTY          TIME CMD
  797   797 ?        00:00:00 sshd
11680 11680 ?        00:00:03 sshd
16361 16361 ?        00:00:02 sshd

Hinweis – Für die Erklärung verschiedener Spalteninhalte siehe Manpage.

Referenz : Manpage

2. oben

oben Befehl wird verwendet, um die Linux-Prozesse anzuzeigen. Es bietet eine dynamische Echtzeitansicht des laufenden Systems. Normalerweise zeigt dieser Befehl die zusammenfassenden Informationen des Systems und die Liste der Prozesse oder Threads an, die derzeit vom Linux-Kernel verwaltet werden.
Sobald Sie diesen Befehl ausführen, wird ein interaktiver Befehlsmodus geöffnet, in dem die obere Hälfte die Statistiken der Prozesse und der Ressourcennutzung enthält. Und die untere Hälfte enthält eine Liste der derzeit laufenden Prozesse. Drücken Sie q verlässt einfach den Befehlsmodus.

Syntax :

top

Hier

  • PID: Zeigt die eindeutige Prozess-ID der Aufgabe.
  • PR: Steht für Priorität der Aufgabe.
  • SHR: Stellt die Menge des gemeinsam genutzten Speichers dar, der von einer Aufgabe verwendet wird.
  • VIRT: Gesamter virtueller Speicher, der von der Aufgabe verwendet wird.
  • BENUTZER: Benutzername des Eigentümers der Aufgabe.
  • %CPU: Stellt die CPU-Auslastung dar.
  • ZEIT+: CPU-Zeit, das gleiche wie „TIME“, aber mit mehr Granularität durch Hundertstelsekunden.
  • SHR: Stellt die Shared Memory-Größe (KB) dar, die von einer Aufgabe verwendet wird.
  • NI: Stellt einen Nice Value der Aufgabe dar. Ein negativer Nice-Wert bedeutet eine höhere Priorität, und ein positiver Nice-Wert bedeutet eine niedrigere Priorität.
  • %MEM: Zeigt den Speicherverbrauch der Aufgabe an.

Beispiele:

1) Top-Befehl nach spezifischer Wiederholung verlassen: Die obere Ausgabe wird aktualisiert, bis Sie „q“ drücken. Mit dem folgenden Befehl wird der obere Befehl automatisch nach 20 Wiederholungen beendet.

top -n 10

2) Bestimmten Benutzerprozess anzeigen

top -u unixcop

hier der Benutzer mit dem Namen unixcop

3) Laufenden Prozess oben hervorheben: Drücken Sie ‘z‘ Die Option in running top zeigt den laufenden Prozess in Farbe an, was Ihnen helfen kann, den laufenden Prozess leicht zu identifizieren

4) Zeigt den absoluten Pfad der Prozesse:

Drücken Sie ‚c‘ Option beim Ausführen des Top-Befehls, wird der absolute Pfad des laufenden Pro

angezeigt

5) Laufenden Prozess beenden: Sie können einen Prozess beenden, nachdem Sie die PID des Prozesses gefunden haben, indem Sie ‘k‘ drücken Option beim Ausführen des Top-Befehls, ohne das Top-Fenster zu verlassen, wie unten gezeigt.

6) Nach CPU-Auslastung sortieren: Drücken Sie (Umschalt+P) um Prozesse nach CPU-Auslastung zu sortieren.

7) Zeigt die oberste Befehlssyntax:

top -h 

8) Stapelmodus: Senden Sie die Ausgabe von oben an eine Datei oder ein beliebiges anderes Programm.

top -b

9) Sicherer Modus: Top im sicheren Modus verwenden.

top -s

10) Befehlszeile: Der folgende Befehl beginnt oben mit dem letzten geschlossenen Zustand.

Top -c

11) Verzögerungszeit : Zeigt die Verzögerungszeit zwischen Bildschirmaktualisierungen an.

top -d seconds.tenths

3. htop

top command im Linux-System ist ein Befehlszeilendienstprogramm, mit dem der Benutzer die wichtigen Ressourcen des Systems oder die Prozesse des Servers interaktiv in Echtzeit überwachen kann. top ist ein neueres Programm im Vergleich zu top Befehl und bietet viele Verbesserungen gegenüber dem Befehl top. htop unterstützt die Mausbedienung, verwendet Farbe in seiner Ausgabe und gibt visuelle Hinweise auf Prozessor-, Speicher- und Swap-Nutzung. htop gibt auch vollständige Befehlszeilen für Prozesse aus und ermöglicht es, sowohl vertikal als auch horizontal für Prozesse bzw. Befehlszeilen zu scrollen.

Syntax:

htop [-dChusv]

Beispiel:

Optionen:

  • -d –Verzögerung : Wird verwendet, um die Verzögerung zwischen Aktualisierungen in Zehntelsekunden anzuzeigen.
  • -C –keine Farbe –keine Farbe :htop im Monochrom-Modus starten.
  • -h –Hilfe : Wird verwendet, um die Hilfemeldung anzuzeigen und zu beenden.
  • -u –user=BENUTZERNAME : Wird verwendet, um nur die Prozesse eines bestimmten Benutzers anzuzeigen.
htop -u qadry
  • -p –pid=PID, PID… : Wird verwendet, um nur die angegebenen PIDs anzuzeigen.
  • -s –Sortierschlüssel SPALTE : Nach dieser Spalte sortieren (verwenden Sie –sort-key help für eine Spaltenliste).
  • -V –Version : Versionsinformationen ausgeben und beenden.

Interaktive Befehle:

  • Pfeile, Bild auf, Bild ab, Pos1, Ende :Blättern Sie durch die Prozessliste.
  • Leertaste :Einen Prozess markieren oder Markierung aufheben.
  • Du – Tag alle Prozesse aufheben (alle mit der Leertaste hinzugefügten Tags entfernen).
  • s – Prozesssystemaufrufe verfolgen.
  • F1 – Hilfe
  • F2 – Einrichtung
  • F3 – Suchen
  • F4 – Filtern:Geben Sie einen Teil einer Prozessbefehlszeile ein und es werden nur Prozesse angezeigt, deren Namen übereinstimmen.
  • F5 – Baumansicht.
  • F6 – Sortieren.
  • F7 – Erhöhen Sie die Priorität des ausgewählten Prozesses. Dies kann nur vom Superuser durchgeführt werden.
  • F8 – Verringern Sie die Priorität des ausgewählten Prozesses.
  • F9 – Prozess beenden.
  • F10 – Beenden.

4. lsof

Linux/Unix betrachtet alles als Datei und verwaltet Ordner. Also „Dateien oder eine Datei“ ist unter Linux/Unix sehr wichtig. Während der Arbeit in einem Linux/Unix-System werden möglicherweise mehrere Dateien und Ordner verwendet, von denen einige sichtbar sind und andere nicht.
lsof Befehl steht für Liste der geöffneten Dateien . Dieser Befehl liefert eine Liste der geöffneten Dateien. Grundsätzlich gibt es die Informationen, um herauszufinden, welche Dateien von welchem ​​​​Prozess geöffnet werden. Auf einen Schlag listet es alle geöffneten Dateien in der Ausgabekonsole auf. Es kann nicht nur allgemeine reguläre Dateien auflisten, sondern es kann ein Verzeichnis, eine spezielle Blockdatei, eine gemeinsam genutzte Bibliothek, eine spezielle Zeichendatei, eine reguläre Pipe, eine benannte Pipe, einen Internet-Socket, einen UNIX-Domain-Socket und viele andere auflisten. es kann mit dem grep-Befehl kombiniert werden und kann für erweitertes Suchen und Auflisten verwendet werden.

Syntax:

lsof [option][user name]

Optionen mit Beispielen:

  • Alle geöffneten Dateien auflisten: Dieser Befehl listet alle Dateien auf, die von irgendeinem Prozess im System geöffnet werden.
lsof

Hier sehen Sie Details zu geöffneten Dateien. Prozess-ID, der mit dem Prozess verbundene Benutzer, FD (Dateideskriptor), Größe der Datei, alles zusammen gibt detaillierte Informationen über die durch den Befehl geöffnete Datei, Prozess-ID, Benutzer, ihre Größe usw.

  • FD repräsentiert als Dateideskriptor.
  • cwd :Aktuelles Arbeitsverzeichnis.
  • txt :Textdatei.
  • Speicher :Speicherdatei.
  • mmap :Speicherabgebildetes Gerät.
  • Alle Dateien auflisten, die von einem Benutzer geöffnet wurden: Es gibt mehrere Benutzer eines Systems und jeder Benutzer hat unterschiedliche Anforderungen und verwendet dementsprechend Dateien und Geräte. Um eine Liste von Dateien zu finden, die von einem bestimmten Benutzer geöffnet wurden, ist dieser Befehl nützlich.

Syntax:

lsof -u username

Beispiel :

lsof -u qadry

In der obigen Abbildung mit dem Befehl lsof -u qadry listet alle vom Benutzer geöffneten Dateien auf. Außerdem können wir hier den Dateityp sehen und sie sind:

  • DIR: Verzeichnis
  • REG: Normale Datei
  • CHR: Charakterspezifische Datei
  • Alle Dateien auflisten, die von allen außer einem bestimmten Benutzer geöffnet werden: Mit Hilfe dieses Befehls können Sie alle Dateien auflisten, die von allen Prozessen und allen Benutzern geöffnet wurden. Aber wenn wir die Liste der Dateien finden wollen, die von allen Benutzern außer einem bestimmten Benutzer geöffnet werden, können wir Folgendes verwenden:

Syntax:

lsof -u ^root

In der angegebenen Abbildung können wir beobachten, dass keine Dateien vom Root-Benutzer geöffnet werden.

  • Alle geöffneten Dateien eines bestimmten Prozesses auflisten: Dieser Befehl kann alle Dateien auflisten, die von einem bestimmten Prozess geöffnet wurden. -c gefolgt von Prozessnamen kann alle Dateien finden, die von diesem bestimmten Prozess geöffnet werden, der im Befehl genannt wird.
Syntax:
lsof -c crond

Hier können Sie beobachten, dass die Dateien und ihre Beschreibung vom Crond-Prozess geöffnet wurden.

  • Alle geöffneten Dateien auflisten, die von einem bestimmten Prozess geöffnet werden: Jede Datei ist einer Prozess-ID zugeordnet. Es kann viele Dateien geben, die von einem bestimmten Prozess geöffnet werden. Durch die Verwendung von lsof -p Prozess-ID können Dateien überprüft werden, die von einem bestimmten Prozess geöffnet wurden.

Syntax:

lsof -p process ID

Beispiel :

lsof -p 2781
  • Dateien, die von allen anderen PIDs geöffnet wurden: Wie die oben angegebene Abbildung zeigt, listet der Befehl die Dateien auf, die von einer bestimmten Prozess-ID geöffnet wurden. Auf die gleiche Weise können Sie die folgende Befehlsoption verwenden, um die Liste der Dateien herauszufinden, die nicht von einer bestimmten Prozess-ID geöffnet werden.
Syntax:
lsof -p ^process ID
  • Übergeordnete Prozess-IDs auflisten: Es gibt eine große Anzahl von Prozessen, die in einem System ausgeführt werden, und sie haben Dateien für ihre Verwendung geöffnet. Es kann viele untergeordnete Prozesse eines Prozesses geben, und dieser Prozess kann auch als übergeordneter Prozess bezeichnet werden. Um die Liste der vom übergeordneten Prozess geöffneten Dateien herauszufinden, wird der Befehl lsof mit der Option -R verwendet .

Syntax:

lsof -R
  • Dateien, die von einem Verzeichnis geöffnet werden: Es listet die Dateien auf, die von einem bestimmten Verzeichnis geöffnet werden. Es gibt Dateien sowie das Verzeichnis in einem System. Es können also neben der regulären Datei auch mehrere Dateien von einem Verzeichnis geöffnet werden.

Syntax:

lsof -D directory path
  • Durch Netzwerkverbindungen geöffnete Dateien: Unser PC/System kann über verschiedene Netzwerke verbunden werden, was für eine Vielzahl von Zwecken hilfreich ist. Da wir wissen, dass unter Linux alles eine Datei ist, können wir sogar die Dateien überprüfen, die von einigen Netzwerkverbindungen im System geöffnet werden.

Syntax:

lsof -i

Beispiel:

lsof -i tcp

Hier in der Abbildung sehen wir die vom TCP-Netzwerk geöffneten Dateien. Auf die gleiche Weise können wir nach UDP usw. suchen.

Hinweis: Um mehr Details über den Befehl lsof zu erfahren, können Sie die Handbuchseite wie folgt einsehen:

 man lsof

Linux
  1. 30 Übungen zu Linux-Prozessen für Systemadministratoren

  2. Linux – Init-Prozess:Urahn aller Prozesse?

  3. Linux-ps-Befehl

  4. UNIX / Linux:3 Möglichkeiten, Signale an Prozesse zu senden

  5. UNIX-/Linux-Prozesse:C fork()-Funktion

30 Top-Befehlsbeispiele für die Überwachung unter Linux

So beenden Sie Zombie-Prozesse in Linux

Laufende Prozesse

Prozesse unter Linux verstehen

Befehle für das Prozessmanagement in Linux

So senden Sie Prozesse unter Linux an den Hintergrund