Finde Kinder des Prozesses

15

Gibt es eine Möglichkeit zu wissen, wer Kinder des spezifischen Prozesses sind? Zum Beispiel die Kinder, deren Eltern-ID foo ist?

Mohammad Reza Rezwani
quelle

Antworten:

26

Sie suchen nach dem pstreeBefehl. pstreealleine listet alle Prozesse in einer Baumform auf (wie lsblkauch). Sie können das -pFlag verwenden, um auch die PIDs aufzulisten und den -sübergeordneten Prozess anzuzeigen :

$ pstree -p 602
udisksd(602)-+-{cleanup}(607)
             |-{gdbus}(605)
             |-{gmain}(603)
             `-{probing-thread}(606)

Eine (wahrscheinlich) POSIX-kompatible Methode, um die untergeordneten PIDs zu erhalten (die ich in den Kommentaren an anderer Stelle erwähnt habe):

ps -o ppid= -o pid= -A | awk '$1 == <some pid>{print $2}'

Dies weist psan, die übergeordnete PID und PID aller Prozesse (ohne Überschriften) zu schreiben und dann awkzu ermitteln, in welchen Zeilen die angegebene PID im ersten Feld (der übergeordneten PID) enthalten ist, und gibt das entsprechende zweite Feld (die untergeordnete PID) aus.

muru
quelle
10

Wenn Sie nur die unmittelbaren untergeordneten Elemente eines Prozesses mit der PID anzeigen möchten, 123können Sie psdie --ppidOption des Befehls verwenden :

ps --ppid 123

Sie können dies mit dem pidofBefehl kombinieren, um die untergeordneten Elemente eines Prozesses anhand des Namens abzurufen, dh anhand eines aufgerufenen Prozessesfoo

ps --ppid $(pidof foo)
Stahlfahrer
quelle
10

Eine weitere Option ist die Verwendung des Systemmonitors (vorinstalliert). Markieren Sie in der SM-Menüleiste die Option "Abhängigkeiten" unter "Ansicht", um eine visuelle Rückmeldung zu erhalten, in der übergeordnete und untergeordnete Prozesse angezeigt werden (siehe Abbildung unten).

Ich bevorzuge die CL (Command Line) selbst und schlage vor, dass diejenigen, die Linux, in diesem Fall Ubuntu, täglich verwenden, klugerweise ihre Zeit in das Erlernen der grundlegenden Befehle gegenüber GUI-Anwendungen investieren oder zumindest in der Lage sind, beides zu beherrschen gewisser grad!

Bildbeschreibung hier eingeben Bildbeschreibung hier eingeben

v2r
quelle
1
OT: Welches Thema ist das?
Muru
1
Ich verwende Ubuntu + GnomeShell 3.2.1. Das Thema heißt "AdwaitaDark". Dies ist ein GTK3-Thema, es ist jedoch benutzerdefiniert und nicht verfügbar, wie Sie es in den Screenshots sehen.
v2r
6

Ich bin kein Experte, aber als ich die obigen Antworten gelesen habe, schien es mir, dass es wahrscheinlich einen direkteren Weg gibt, dies über das proc-Dateisystem zu tun, z. Und tatsächlich gibt es: Für einen Prozess mit dem ID-Code $ mypid werden seine untergeordneten Prozesse in aufgelistet

/proc/$mypid/task/$mypid/children

z.B

$ cat /proc/3123/task/3123/children 
3131 3133

Ebenso können Sie die übergeordnete Prozess-ID über den Eintrag "PPid" in der Datei abrufen

/proc/$mypid/task/$mypid/status

z.B

$ grep PPid /proc/3131/task/3131/status
PPid:   3123
$ grep PPid /proc/3131/task/3131/status | cut -f2
3123

Ich bin mir jedoch nicht sicher, wie portabel dies für Linux-Systeme ist.

andybuckley
quelle
1
Wenn Portabilität von Bedeutung ist: ps -o ppid= -o pid= -A | awk '$1 == <some pid>' | cut -f2sollte POSIX-kompatibel sein.
muru