Trova i figli del processo


15

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:


26

Stai cercando il pstreecomando. pstreedi per sé elencherà tutti i processi in una forma ad albero (come lsblkfa). È possibile utilizzare il -pflag per elencare anche i PID e -sper 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 psdi scrivere il PID e il PID padre di tutti i processi (senza intestazioni), quindi usa awkper vedere quali righe hanno il PID dato nel primo campo (il PID padre) e stampa il secondo campo corrispondente (il PID figlio).


10

Se vuoi solo vedere i figli immediati di un processo il cui PID è 123, puoi usare l' opzione psdel comando --ppid:

ps --ppid 123

È possibile combinare questo con il pidofcomando per ottenere i figli di un processo per nome, ovvero dato un processo chiamatofoo

ps --ppid $(pidof foo)

10

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!

inserisci qui la descrizione dell'immagine inserisci qui la descrizione dell'immagine


1
OT: Di che tema si tratta?
Muru,

1
Uso Ubuntu + GnomeShell 3.2.1 Il tema si chiama "AdwaitaDark" che è un tema GTK3, ma è personalizzato e non disponibile, come lo vedi nelle schermate.
v2r,

6

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ò.


1
Se la portabilità è una preoccupazione: ps -o ppid= -o pid= -A | awk '$1 == <some pid>' | cut -f2dovrebbe essere conforme a POSIX.
muru,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.