czy jest jakiś sposób, aby dowiedzieć się, kim są dzieci określonego procesu? na przykład te dzieci, których identyfikator rodzica to foo?
Szukasz pstree
polecenia.
pstree
sam wylistuje wszystkie procesy w formie drzewa (podobnie jak lsblk
robi). Możesz użyć -p
flagi, aby wyświetlić również PID, a także -s
aby pokazać proces nadrzędny:
$ pstree -p 602
udisksd(602)-+-{cleanup}(607)
|-{gdbus}(605)
|-{gmain}(603)
`-{probing-thread}(606)
(Prawdopodobnie) zgodny ze standardem POSIX sposób uzyskiwania potomnych identyfikatorów PID (o czym wspominałem w innych komentarzach):
ps -o ppid= -o pid= -A | awk '$1 == <some pid>{print $2}'
Mówi ps
to o zapisaniu nadrzędnego PID i PID wszystkich procesów (bez nagłówków), a następnie używa, awk
aby zobaczyć, które linie mają dany PID w pierwszym polu (nadrzędny PID), i wypisuje odpowiednie drugie pole (podrzędny PID).
Jeśli chcesz tylko zobaczyć bezpośrednie elementy potomne procesu, którego PID to 123
, możesz użyć opcji ps
polecenia --ppid
:
ps --ppid 123
Możesz połączyć to z pidof
poleceniem, aby uzyskać potomki procesu według nazwy, tj. Biorąc pod uwagę proces o nazwiefoo
ps --ppid $(pidof foo)
Inną opcją jest użycie Monitora systemu (jest fabrycznie zainstalowany). W SM Menubar zaznacz opcję „Zależności”, pod „Widok”, aby mieć wizualną informację zwrotną, pokazującą procesy nadrzędne i potomne, takie jak pokaz na zrzucie ekranu poniżej.
Sam wolę CL (wiersz poleceń) i sugeruję, że ci, którzy używają Linuksa, w tym przypadku Ubuntu na co dzień, mądrze inwestują swój czas w naukę podstawowych poleceń, zamiast aplikacji GUI, lub przynajmniej są w stanie opanować oba pewien stopień!
Nie jestem ekspertem, ale czytając powyższe odpowiedzi, wydawało mi się, że istnieje prawdopodobnie bardziej bezpośredni sposób, aby to zrobić za pośrednictwem systemu plików proc, np. Do celów programistycznych w skrypcie, a nie do wyświetlania przez człowieka. I rzeczywiście jest tak: dla procesu o kodzie ID $ mypid jego procesy potomne są wymienione w
na przykład
Podobnie można uzyskać identyfikator procesu nadrzędnego poprzez wpis „PPid” w pliku
/proc/$mypid/task/$mypid/status
na przykład
Nie jestem jednak pewien, jak przenośne jest to poza systemami Linux.
źródło
ps -o ppid= -o pid= -A | awk '$1 == <some pid>' | cut -f2
powinien być zgodny z POSIX.