So finden Sie die Elternprozess-ID (PPID) in Linux und Unix
Dieses Tutorial zeigt Ihnen, wie Sie die Elternprozess-ID (PPID) von Prozessen über die Kommandozeile mithilfe der Befehle ps und pstree in Linux- und Unix-ähnlichen Betriebssystemen anhand von Beispielen finden.
Dieser Leitfaden behandelt Methoden zur Ermittlung der PPIDs von:
- Ein bestimmter Prozess: Finde die PPID eines bestimmten Programms, über das du mehr wissen möchtest.
- Alle Prozesse: Ermitteln Sie die PPID jedes laufenden Prozesses auf Ihrem System.
- Der aktuelle Prozess: Identifizieren Sie die PPID Ihrer eigenen Shell-Sitzung.
Vorteile von PPID
Die Kenntnis der Elternprozess-ID (PPID) eines Prozesses unter Linux kann in verschiedenen Szenarien nützlich sein, insbesondere für die Systemadministration, Fehlerbehebung und das Verständnis des Systemverhaltens.
Die Prozess-ID des übergeordneten Prozesses (PPID) in Linux ist nützlich für:
- Analyse von Prozesshierarchien, um das Verhalten von Anwendungen und Diensten zu verstehen.
- Identifizierung von Waisenprozessen, die Ressourcen verbrauchen oder sich nach dem Beenden ihres übergeordneten Prozesses unvorhersehbar verhalten können.
- Verwaltung von Prozessbäumen, die eine gezielte Beendigung von Gruppen verwandter Prozesse ermöglicht.
- Debugging und Entwicklung, insbesondere für die Fehlerbehebung und Verwaltung von Kindprozessen innerhalb von Anwendungen.
- Sicherheitsanalyse, die dabei hilft, verdächtige Prozesse bis zu ihren Ursprüngen zurückzuverfolgen und das Verhalten von Malware zu verstehen.
- Leistungsüberwachung und -optimierung, durch die Identifizierung ressourcenintensiver Prozesse und ihrer Ursprünge.
Lass uns anfangen!
Elternprozess-ID (PPID) eines bestimmten Prozesses in Linux finden
Es gibt einige Möglichkeiten, die übergeordnete Prozess-ID (PID) eines bestimmten Prozesses in Linux über die Befehlszeile zu finden. Eine übliche Methode ist die Verwendung des Befehls ps, der für "process status" steht.
Dieser Befehl wird verwendet, um Informationen über aktive Prozesse anzuzeigen. Lassen Sie uns sehen, wie man die PPID eines Prozesses mit dem ps-Befehl findet.
1. Öffnen Sie ein Terminal: Zuerst müssen Sie ein Terminalfenster öffnen. Sie können dies tun, indem Sie in Ihrem Anwendungsmenü nach „Terminal“ suchen oder eine Tastenkombination verwenden, die oft Strg+Alt+T ist.
2. Finden Sie die PID Ihres Prozesses: Bevor Sie die übergeordnete PID finden, müssen Sie die PID Ihres Prozesses kennen. Sie können diese finden, indem Sie den ps-Befehl in Kombination mit grep verwenden.
Zum Beispiel, wenn Sie nach der PID eines Prozesses mit dem Namen bash suchen, würden Sie Folgendes verwenden:
$ ps -aux | grep bashDieser Befehl listet alle aktiven Prozesse auf und filtert dann die Liste, um nur Zeilen anzuzeigen, die "bash" enthalten. Die Ausgabe zeigt mehrere Spalten; die zweite Spalte listet die PIDs auf.
ostechn+ 86631 0.0 0.0 8184 5136 pts/0 Ss 17:55 0:00 bash
ostechn+ 87430 0.0 0.0 6240 652 pts/0 S+ 18:00 0:00 grep bashDer Befehl ps -aux | grep bash wird häufig verwendet, um Prozesse aufzulisten und diejenigen herauszufiltern, die mit der "bash"-Shell zusammenhängen. Es gibt jedoch eine elegantere Methode, dies zu erreichen, ohne den grep-Prozess selbst in den Ergebnissen zu berücksichtigen. Hier sind ein paar Alternativen:
Verwendung von egrep mit eckigen Klammern:
$ ps aux | egrep '[b]ash'Dies wird Zeilen enthalten, die "bash" enthalten, aber den eigentlichen "grep"-Prozess von den Ergebnissen ausschließen.
Beispielausgabe:
ostechn+ 86631 0.0 0.0 8184 5136 pts/0 Ss 17:55 0:00 bash
Verwendung von pgrep (ein zuverlässigerer Ansatz):
$ pgrep bash
86631Im Gegensatz zu ps aux sucht pgrep direkt nach Prozessnamen und ist weniger anfällig dafür, den grep-Prozess in der Ausgabe einzuschließen.
Denken Sie daran, dass diese Methoden einfacher sind und verhindern, dass Ihre Ergebnisse durch den grep-Prozess selbst überladen werden.
3. Die übergeordnete PID anzeigen: Sobald Sie die PID Ihres Prozesses haben, können Sie seine übergeordnete PID (PPID) mit dem ps-Befehl unter Verwendung bestimmter Optionen finden.
Wie Sie im Ausgabeergebnis des vorherigen Befehls sehen können, ist die PID des Bash-Prozesses 86631.
Jetzt können Sie die übergeordnete Prozess-ID des Bash-Prozesses mit dem folgenden Befehl anzeigen:
$ ps -o ppid= -p 86631Hier sagt -o ppid= ps, dass nur die übergeordnete PID des Prozesses ohne Überschriften angezeigt werden soll, und -p 86631 gibt die PID des Prozesses an, an dem Sie interessiert sind. Ersetzen Sie 86631 durch die tatsächliche PID Ihres Prozesses.
Laut der obigen Ausgabe ist 86624 die übergeordnete Prozess-ID (PPID) des Bash-Prozesses.
Diese Methode ist unkompliziert und funktioniert gut, um die übergeordnete PID eines bestimmten Prozesses unter Linux zu finden. Denken Sie daran, bash durch den tatsächlichen Prozessnamen zu ersetzen, an dem Sie interessiert sind, und verwenden Sie die richtige PID, die Sie in Ihrer ersten Suche gefunden haben.
PPIDs aller Prozesse drucken
Wenn Sie die PPIDs aller Prozesse auf Ihrem Linux-Rechner anzeigen möchten, würden Sie Folgendes verwenden:
$ ps jBeispielausgabe:
PPID PID PGID SID TTY TPGID STAT UID TIME COMMAND
86624 86631 86631 86631 pts/0 90712 Ss 1000 0:00 bash
86631 90712 90712 86631 pts/0 90712 R+ 1000 0:00 ps jWie Sie in der obigen Ausgabe sehen, zeigt der Befehl ps j ein auf die Auftragssteuerung ausgerichtetes Format an, das unter anderem die PPID für alle Prozesse anzeigt. Es ist eine schnelle Möglichkeit, einen Überblick über Prozesshierarchien zu erhalten.
Laut der obigen Ausgabe ist die PID des Bash-Prozesses 86631 und seine PPID ist 86624.
Um die PPID eines bestimmten Prozesses anzuzeigen, geben Sie einfach dessen PID an, wie ps j 86631, um die Details einschließlich seiner PPID zu sehen.
$ ps j 86631
PPID PID PGID SID TTY TPGID STAT UID TIME COMMAND
86624 86631 86631 86631 pts/0 93681 Ss 1000 0:00 bashSie können nur die PPIDs mit dem awk-Befehl filtern und alle anderen Details wie unten ausschließen:
$ ps j | awk 'NR>1 {print $1}'
86624
86631
86631Wenn Sie ein BSD-System verwenden (wie macOS), verwenden Sie ps j | awk 'NR>1 {print $3}', um die PPIDs aller Prozesse aufzulisten.
Anzeige der PPID eines Prozesses mit dem Befehl pstree
Der Befehl pstree in Linux ist ein Dienstprogramm, das laufende Prozesse als Baum anzeigt. Diese Baumstruktur stellt visuell die Hierarchie der Prozesse dar und zeigt Elternprozesse und deren Kindprozesse in verschachtelter Form.
Diese hierarchische Ansicht macht es einfach, die Beziehung zwischen Prozessen zu verstehen, einschließlich welche Prozesse von anderen erzeugt wurden.
Um die PPID eines bestimmten Prozesses, zum Beispiel bash, mit dem Befehl pstree aufzulisten, führen Sie aus:
$ pstree -sg 86631Dieser Befehl visualisiert den Baum der übergeordneten Prozesse, die zum angegebenen Prozess (z. B. 86631) führen, was besonders nützlich ist, um die Prozessabstammung in einer hierarchischen Ansicht zu verstehen.
systemd(1)───systemd(1697)───gnome-terminal-(86624)───bash(86631)───pstree(94963)Abrufen der PPID des aktuellen Prozesses
Der „aktuelle Prozess“ im Kontext eines Unix-ähnlichen Betriebssystems (wie Linux) bezieht sich auf den Prozess, der derzeit von der Shell oder dem Terminal, in dem Sie arbeiten, ausgeführt wird.
Jedes Mal, wenn Sie einen Befehl im Terminal ausführen, wird dieser Befehl als Prozess ausgeführt. Die Shell selbst ist ebenfalls ein Prozess, und wenn Sie nach dem „aktuellen Prozess“ fragen, bedeutet dies im Allgemeinen den Shell-Prozess, in dem Sie sich gerade befinden.
Wenn Sie mit einer Shell (wie Bash, Zsh usw.) interagieren, werden mehrere Umgebungsvariablen automatisch gesetzt, die Informationen über die Shell und ihre Prozesse bereitstellen.
Zwei wichtige Variablen in diesem Zusammenhang sind:
$$: Diese Variable enthält die Prozess-ID (PID) der aktuellen Shell. Sie gibt Ihnen die PID des Prozesses, der die Shell-Instanz ausführt, die Sie derzeit verwenden.$PPID: Diese Variable enthält die Parent Process ID (PPID) der Shell. Sie zeigt Ihnen die PID des Prozesses, der die aktuelle Shell gestartet hat. Zum Beispiel, wenn Sie ein Terminalfenster aus einer grafischen Desktop-Umgebung geöffnet haben, wäre die PPID wahrscheinlich die PID des Prozesses, der mit der Desktop-Umgebung oder dem Fenstermanager verbunden ist.
Um die PID Ihrer aktuellen Shell zu sehen, würden Sie Folgendes verwenden:
$ echo $$Und um die PID des übergeordneten Prozesses Ihrer aktuellen Shell zu sehen, lautet der Befehl:
$ echo $PPIDDas Verstehen dieser Konzepte ist nützlich für Prozessmanagement, Skripting und Systemverwaltungsaufgaben.
Verständnis des Unterschieds zwischen PID und PPID
Wir wissen jetzt, wie man die PPID eines gegebenen Prozesses findet. Sie könnten sich fragen, was der Unterschied zwischen PID (Prozess-ID) und PPID (Elternprozess-ID) ist. Lassen Sie uns darüber sprechen.
PID (Prozess-ID):
- Die PID ist eine eindeutige numerische Kennung, die jedem laufenden Prozess in einem Betriebssystem zugewiesen wird.
- Es stellt eine Instanz eines Programms oder einer Anwendung dar, die derzeit ausgeführt wird.
- PIDs sind für die Verwaltung von Prozessen unerlässlich, da sie es dem System ermöglichen, einzelne Prozesse zu verfolgen und mit ihnen zu interagieren.
- Wenn Sie einen neuen Prozess starten (zum Beispiel einen Befehl im Terminal ausführen), weist das Betriebssystem ihm eine eindeutige PID zu.
- PIDs werden für verschiedene Zwecke verwendet, einschließlich Prozesssteuerung, Überwachung und Beendigung.
PPID (Elternprozess-ID):
- Die PPID bezieht sich auf die PID des Prozesses, der einen anderen Prozess erzeugt oder erstellt hat.
- Mit anderen Worten, die PPID stellt den übergeordneten Prozess eines gegebenen Prozesses dar.
- Wenn ein neuer Prozess erstellt wird (z. B. durch Ausführen eines Shell-Befehls), ordnet das System ihn der PPID des Prozesses zu, der ihn initiiert hat.
- Die PPID stellt eine hierarchische Beziehung zwischen Prozessen her und bildet eine baumartige Struktur.
Zum Beispiel:
- Wenn Sie ein Terminal öffnen (das zu einem Prozess mit einer bestimmten PID wird), wird der Shell-Prozess, der das Terminal gestartet hat, dessen PPID.
- Alle Prozesse, die innerhalb dieses Terminals gestartet werden (wie das Ausführen von Befehlen), erben die PID des Terminals als ihre PPID.
Zusammenfassend identifizieren PIDs eindeutig einzelne Prozesse, während PPIDs die Eltern-Kind-Beziehung zwischen Prozessen anzeigen. Das Verständnis dieser Konzepte ist entscheidend für die Prozessverwaltung und Fehlerbehebung in einem Betriebssystem.
Fazit
In diesem Tutorial haben wir erklärt, wie man die übergeordnete Prozess-ID (PPID) für einen bestimmten Prozess, die PPIDs für alle Prozesse und die PPID für den aktuellen Prozess mit den Befehlen ps und pstree unter Linux erhält.
Wir haben auch den Unterschied zwischen PID und PPID und deren Bedeutung besprochen.
Das Verstehen und Kennen der Parent Process ID (PPID) bietet nützliche Einblicke in die Hierarchie und die Beziehungen zwischen Prozessen in Linux. Dieses Wissen hilft bei Aufgaben wie der Fehlersuche, der Ressourcenverwaltung und der Erhöhung der Sicherheit.
Verwandte Lektüre:
- Wie man alle laufenden Daemons in Linux auflistet
- Wie man herausfindet, wie lange ein Prozess unter Linux läuft
- So ändern Sie die Priorität eines Prozesses in Linux
- So setzen Sie einen Prozess in Linux aus und setzen ihn später fort
- Reptyr – Einen laufenden Prozess von einem Terminal auf ein anderes verschieben, ohne ihn zu schließen
