Encontre filhos do processo

13

Existe alguma maneira de saber, quem são as crianças do processo específico? por exemplo, aquelas crianças cujo ID pai é foo?

    
por Mohammad Reza Rezwani 18.08.2014 / 13:00

4 respostas

22

Você está procurando o comando pstree . pstree por si só listará todos os processos em uma forma de árvore (como lsblk faz). Você pode usar o sinal -p para obter os PIDs listados e também o -s para mostrar o processo pai:

$ pstree -p 602
udisksd(602)-+-{cleanup}(607)
             |-{gdbus}(605)
             |-{gmain}(603)
             '-{probing-thread}(606)

Uma maneira (provavelmente) compatível com POSIX de obter os PIDs filhos (que eu mencionei nos comentários em outro lugar):

ps -o ppid= -o pid= -A | awk ' == <some pid>{print }'

Isto diz ps para escrever o PID pai e o PID de todos os processos (sem cabeçalhos), e depois usa awk para ver quais linhas têm o PID dado no primeiro campo (o pai PID) e imprime o segundo campo correspondente (o PID filho).

    
por muru 18.08.2014 / 13:06
10

Outra opção é usar o Monitor do Sistema (vem pré-instalado). Na opção "Dependências" da barra de menu do SM, em "Visualizar", para obter um feedback visual, mostrando o processo pai / mãe, como mostrado na captura de tela abaixo.

Eu prefiro o CL (Command Line) e sugiro, que aqueles que usam o Linux, neste caso o Ubuntu diariamente, investem sabiamente o seu tempo aprendendo os comandos básicos, através de Aplicações GUI ou pelo menos são capazes de dominar tanto a um certo grau!

    
por v2r 18.08.2014 / 18:25
9

Se você quiser apenas ver os filhos imediatos de um processo cujo PID é 123 , você pode usar a opção ps do comando --ppid :

ps --ppid 123

Você pode combinar isso com o comando pidof para obter os filhos de um processo pelo nome, ou seja, considerando um processo chamado foo

ps --ppid $(pidof foo)
    
por steeldriver 18.08.2014 / 14:57
6

Eu não sou um especialista, mas lendo as respostas acima, pareceu-me que provavelmente existe uma maneira mais direta de fazer isso através do sistema de arquivos proc, por exemplo. para uso programático em um script em vez de exibição legível por humanos. E, de fato, existe: para um processo com o código de ID $ mypid, seus processos filhos são listados em

/proc/$mypid/task/$mypid/children

por exemplo,

$ cat /proc/3123/task/3123/children 
3131 3133

Da mesma forma, você pode obter o ID do processo pai por meio da entrada "PPid" no arquivo

/proc/$mypid/task/$mypid/status

por exemplo,

$ grep PPid /proc/3131/task/3131/status
PPid:   3123
$ grep PPid /proc/3131/task/3131/status | cut -f2
3123

Não sei ao certo como isso é portátil além dos sistemas Linux.

    
por andybuckley 23.08.2014 / 21:15