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?
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?
Odpowiedzi:
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
/proc/$mypid/task/$mypid/children
na przykład
$ cat /proc/3123/task/3123/children
3131 3133
Podobnie można uzyskać identyfikator procesu nadrzędnego poprzez wpis „PPid” w pliku
/proc/$mypid/task/$mypid/status
na przykład
$ grep PPid /proc/3131/task/3131/status
PPid: 3123
$ grep PPid /proc/3131/task/3131/status | cut -f2
3123
Nie jestem jednak pewien, jak przenośne jest to poza systemami Linux.
ps -o ppid= -o pid= -A | awk '$1 == <some pid>' | cut -f2
powinien być zgodny z POSIX.