c'è un modo per sapere, chi sono i bambini del processo specifico? per esempio quei bambini per i quali il loro ID genitore è foo?
c'è un modo per sapere, chi sono i bambini del processo specifico? per esempio quei bambini per i quali il loro ID genitore è foo?
Risposte:
Stai cercando il pstree
comando.
pstree
di per sé elencherà tutti i processi in una forma ad albero (come lsblk
fa). È possibile utilizzare il -p
flag per elencare anche i PID e -s
per mostrare anche il processo principale:
$ pstree -p 602
udisksd(602)-+-{cleanup}(607)
|-{gdbus}(605)
|-{gmain}(603)
`-{probing-thread}(606)
Un modo (probabilmente) conforme a POSIX per ottenere i PID secondari (che avevo menzionato nei commenti altrove):
ps -o ppid= -o pid= -A | awk '$1 == <some pid>{print $2}'
Questo dice ps
di scrivere il PID e il PID padre di tutti i processi (senza intestazioni), quindi usa awk
per vedere quali righe hanno il PID dato nel primo campo (il PID padre) e stampa il secondo campo corrispondente (il PID figlio).
Se vuoi solo vedere i figli immediati di un processo il cui PID è 123
, puoi usare l' opzione ps
del comando --ppid
:
ps --ppid 123
È possibile combinare questo con il pidof
comando per ottenere i figli di un processo per nome, ovvero dato un processo chiamatofoo
ps --ppid $(pidof foo)
Un'altra opzione è, per utilizzare System Monitor (viene preinstallato). Nella barra dei menu SM selezionare l'opzione "Dipendenze", sotto "Visualizza", per avere un feedback visivo, che mostri i processi genitore e figlio come mostra nello screenshot qui sotto.
Preferisco io stesso il CL (riga di comando) e suggerisco che coloro che usano Linux, in questo caso Ubuntu su base giornaliera, investano saggiamente il loro tempo nell'apprendimento dei comandi di base, sulle applicazioni della GUI o almeno siano in grado di padroneggiare entrambi su un certo grado!
Non sono un esperto, ma leggendo le risposte di cui sopra mi è sembrato che ci sia probabilmente un modo più diretto per farlo tramite il filesystem proc, ad esempio per un uso programmatico in uno script piuttosto che un display leggibile dall'uomo. E infatti c'è: per un processo con codice ID $ mypid, i suoi processi figlio sono elencati in
/proc/$mypid/task/$mypid/children
per esempio
$ cat /proc/3123/task/3123/children
3131 3133
Allo stesso modo, è possibile ottenere l'ID del processo principale tramite la voce "PPid" nel file
/proc/$mypid/task/$mypid/status
per esempio
$ grep PPid /proc/3131/task/3131/status
PPid: 3123
$ grep PPid /proc/3131/task/3131/status | cut -f2
3123
Non sono sicuro di quanto sia portatile oltre i sistemi Linux, però.
ps -o ppid= -o pid= -A | awk '$1 == <some pid>' | cut -f2
dovrebbe essere conforme a POSIX.