Gibt es eine Möglichkeit zu wissen, wer Kinder des spezifischen Prozesses sind? Zum Beispiel die Kinder, deren Eltern-ID foo ist?
Gibt es eine Möglichkeit zu wissen, wer Kinder des spezifischen Prozesses sind? Zum Beispiel die Kinder, deren Eltern-ID foo ist?
Antworten:
Sie suchen nach dem pstree
Befehl.
pstree
alleine listet alle Prozesse in einer Baumform auf (wie lsblk
auch). Sie können das -p
Flag 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 ps
an, die übergeordnete PID und PID aller Prozesse (ohne Überschriften) zu schreiben und dann awk
zu 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.
Wenn Sie nur die unmittelbaren untergeordneten Elemente eines Prozesses mit der PID anzeigen möchten, 123
können Sie ps
die --ppid
Option des Befehls verwenden :
ps --ppid 123
Sie können dies mit dem pidof
Befehl kombinieren, um die untergeordneten Elemente eines Prozesses anhand des Namens abzurufen, dh anhand eines aufgerufenen Prozessesfoo
ps --ppid $(pidof foo)
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!
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.
ps -o ppid= -o pid= -A | awk '$1 == <some pid>' | cut -f2
sollte POSIX-kompatibel sein.