Articles

9 Möglichkeiten, die Prozess-ID eines Programms unter Linux zu finden

Wenn Sie an einem Linux-System arbeiten, müssen Sie manchmal herausfinden, welche Prozesse ausgeführt werden und welche PID oder PPID daran gebunden ist. Es kann für viele Zwecke verwendet werden.

Grundsätzlich suchen wir in Linux nach einer PID, um ein nicht reagierendes Programm zu beenden, was vom GUI-Task-Manager durchgeführt werden kann, aber CLI ist der effizienteste Weg, um nicht reagierende Programme zu handhaben.

Dies ist besser als die GUI, da GUI-basierte Tools manchmal den noch laufenden versteckten Prozess nicht anzeigen.,

In diesem Tutorial zeigen wir Ihnen, wie Sie die Prozess-ID (PID) eines Programms finden, das auf viele Arten unter Linux ausgeführt wird.

Was ist prozess ID (PID)

PID bezieht sich auf prozess ID, die ist häufig verwendet durch die meisten betriebssystem kernel, wie Linux, Unix, macOS und Windows.

Dies ist eine eindeutige ID, die jedem Prozess automatisch zugewiesen wird, wenn er erstellt wird. Ein Prozess ist eine laufende Instanz eines Programms.

Was ist übergeordnete Prozess-ID (PPID)

Ein übergeordneter Prozess ist ein Prozess, der einen oder mehrere untergeordnete Prozesse erstellt hat., Jeder untergeordnete Prozess erhält eine elterliche Prozess-ID (PPID), und der übergeordnete Prozess beendet das Kind, wenn der Vorgang abgeschlossen ist.

Möglicherweise möchten Sie die folgenden Artikel lesen, da diese sich auf dieses Thema beziehen.

  • So finden Sie heraus, welche Portnummer ein Prozess in Linux verwendet
  • 3 Einfache Möglichkeiten, einen Prozess in Linux zu beenden oder zu beenden

Jedes Mal, wenn die Prozess-ID in allen Prozessen außer init geändert wird. das init ist immer der erste Prozess im system und der Vorfahr aller anderen Prozesse. Es hält PID 1.,

Der Standard-Maximalwert von PIDs ist 32,768. Dies kann durch Ausführen des folgenden Befehls

cat /proc/sys/kernel/pid_max auf Ihrem Computer überprüft werden.

32,768 ist der Maximalwert auf 32-Bit-Systemen, kann jedoch auf 64-Bit-Systemen auf einen beliebigen Wert von bis zu 2^22 (ungefähr 4 Millionen) eingestellt werden.

Sie können fragen, warum brauchen wir solche größe PIDs? Dies liegt daran, dass PIDs nicht sofort wiederverwendet werden können und um mögliche Fehler zu vermeiden.,

Sie können die PID von Prozessen finden, die auf dem System mit den folgenden neun Methoden ausgeführt werden, z. B. pidof-Befehl, pgrep-Befehl, ps-Befehl, pstree-Befehl, ss-Befehl, netstat-Befehl, lsof-Befehl, fuser-Befehl und systemctl-Befehl.

Dies kann mit den folgenden neun Methoden erreicht werden.

  • pidof: pidof – finden Sie die Prozess-ID eines Laufenden Programms.
  • pgrep: pgre – suchen oder signalisieren Sie Prozesse basierend auf Namen und anderen Attributen.,
  • ps: ps – Bericht eine Momentaufnahme der aktuellen Prozesse.
  • pstree-zeigt einen Baum von Prozessen an.
  • ss: ss wird verwendet, um den dump socket statistics.
  • netstat: netstat zeigt eine Liste der geöffneten sockets.
  • lsof: lsof – Liste geöffnete Dateien.,
  • fuser: fuser – list Prozess – IDs aller Prozesse, bei denen eine oder mehrere Dateien geöffnet sind
  • systemctl: systemctl-Steuern Sie das Systemd-System und den Service Manager

Um dies zu beweisen, werden wir die Apache-Prozess-ID finden. Geben Sie Ihren Prozessnamen anstelle von uns ein.

1) Wie finde ich unter Linux eine Prozess-ID (PID) mit dem Befehl pidof?

Mit dem Befehl pidof wird die Prozess-ID des laufenden Programms ermittelt. Es druckt diese IDs in die Standardausgabe., Um dies zu demonstrieren, finden wir die Prozess-ID „Apache2“ im System.

# pidof apache2
2594 2365 2364 2363 2362 2361

In der obigen Ausgabe haben Sie möglicherweise Schwierigkeiten, die Prozess-ID zu identifizieren, da alle PIDs (einschließlich Eltern und Kind) für den Prozessnamen angezeigt werden.

Daher müssen wir die übergeordnete Prozess-PID (PPID) finden, wonach wir suchen. Dies wird die erste Zahl sein. In meinem Fall ist es 3754 und es ist in absteigender Reihenfolge sortiert.

2) Wie suche ich eine Prozess-ID (PID) in Linux mit dem Befehl pgrep?,

Der Befehl pgrep betrachtet die laufenden Prozesse und listet die Prozess-IDs auf, die den Auswahlkriterien entsprechen.

# pgrep apache2236123622363236423652594

Die obige Ausgabe ähnelt der‘ pidof ‚ – Befehlsausgabe, sortiert jedoch die Ergebnisse in aufsteigender Reihenfolge, was deutlich zeigt, dass die übergeordnete Prozess-PID auf der last.In mein Fall ist 3754.,

Hinweis: Die Identifizierung der übergeordneten Prozess-ID kann bei Verwendung des Befehls ‚pidof‘ & ‚pgrep‘ problematisch sein, da jeder Prozess eine einzelne PPID und mehrere PIDs enthält, die den Unterschied zwischen ihnen nicht anzeigen.

3) Wie finde ich eine Prozess-ID (PID) unter Linux mit dem Befehl pstree?

Der Befehl pstree zeigt laufende Prozesse als baumartiges Format an, was eine sehr bequeme Möglichkeit ist, die Prozesshierarchie anzuzeigen und die Ausgabe optisch ansprechender zu gestalten., Wenn im Befehl pstree ein Benutzername angegeben wird, werden alle Prozesse angezeigt, die dem entsprechenden Benutzer gehören.

pstree führt identische Zweige visuell zusammen, indem sie in eckige Klammern gesetzt und der Wiederholungszahl vorangestellt werden.

# pstree -p | grep "apache2" |-
-+-apache2(2361) | |-apache2(2362) | |-apache2(2363) | |-apache2(2364) | |-apache2(2365) | `-apache2(2594)

, Um nur den parent-Prozess verwenden Sie das folgende format.

# pstree -p | grep "apache2" | head -1 |-
-+-apache2(2361)

Der Befehl’pstree‘ ist viel besser als der Befehl ‚pidof‘ & ‚pgrep‘, da er übergeordnete und untergeordnete Prozesse trennt, die von ihnen nicht möglich sind.,

4) Wie finde ich eine Prozess-ID (PID) unter Linux mit dem Befehl ps?

Der Befehl ps zeigt Informationen zu einer Auswahl der aktiven Prozesse an, die die Prozess-ID (pid=PID), das dem Prozess zugeordnete Terminal (tname=TTY), die kumulierte CPU-Zeit im hh:mm:ss-Format (time=TIME) und den ausführbaren Namen (ucmd=CMD) umfassen. Die Ausgabe ist standardmäßig unsortiert.

Die übergeordnete Prozess-ID (PPID) kann anhand des Prozessstartdatums aus der obigen Ausgabe leicht identifiziert werden., In unserem Fall wurde der‘ Apache2 ‚ – Prozess mit December 11th gestartet, wobei es sich um den übergeordneten Prozess und die anderen um den untergeordneten Prozess handelt. Die PID von Apache2 ist 3754.

5) Wie finde ich eine Prozess-ID (PID) unter Linux mit dem Befehl ss?

Der Befehl ss wird zum Speichern von Socket-Statistiken verwendet. Es ermöglicht die Anzeige von Informationen ähnlich wie netstat. Es kann mehr TCP-und Statusinformationen anzeigen als andere Tools.

Es können statistiken für alle arten von sockets wie PAKET, TCP, UDP, DCCP, RAW, Unix domain, etc.,

# ss -tnlp | grep apache2LISTEN 0 128 :::80 :::* users:(("apache2",pid=3319,fd=4),("apache2",pid=3318,fd=4),("apache2",
,fd=4))

6) Wie finde ich eine Prozess-ID (PID) unter Linux mit dem Befehl netstat?

Der Befehl netstat wird zum Drucken von Netzwerkverbindungen, Routingtabellen, Schnittstellenstatistiken, Maskeradeverbindungen und Multicast-Mitgliedschaften verwendet. Standardmäßig zeigt netstat eine Liste offener Sockets an.

Wenn Sie keine Adressfamilien angeben, werden die aktiven Sockets aller konfigurierten Adressfamilien gedruckt. Dieses Programm ist veraltet. Ersatz für netstat ist ss.

# netstat -tnlp | grep apache2tcp6 0 0 :::80 :::* LISTEN 

7) Wie finde ich eine Prozess-ID (PID) unter Linux mit dem Befehl lsof?,

Mit dem Befehl lsof werden geöffnete Dateien aufgelistet. Der Befehl Linux lsof listet Informationen zu Dateien auf, die von Prozessen geöffnet werden, die auf dem System ausgeführt werden.

8) Wie finde ich eine Prozess-ID (PID) unter Linux mit dem Befehl fuser?

Das Fuser-Dienstprogramm schreibt in die Standardausgabe die Prozess-IDs von Prozessen, die auf dem lokalen System ausgeführt werden und eine oder mehrere benannte Dateien geöffnet haben.

# fuser -v 80/tcp USER PID ACCESS COMMAND80/tcp: root 
www-data 3318 F.... apache2 www-data 3319 F.... apache2

9) Wie finde ich eine Prozess-ID (PID) unter Linux mit dem Befehl systemctl?

Der Befehl systemctl dient zur Steuerung des systemd Service Managers., Dies ist ein Ersatz für die alte SysVinit-Systemverwaltung, und die meisten modernen Linux-Betriebssysteme wurden auf die Systemd verschoben.