Encontre filhos do processo

15

existe alguma maneira de saber quem são filhos do processo específico? por exemplo, aqueles filhos cujo ID pai é foo?

Mohammad Reza Rezwani
fonte

Respostas:

26

Você está procurando o pstreecomando pstreepor si só, listará todos os processos em forma de árvore (como lsblkfaz). Você pode usar o -psinalizador para obter os PIDs listados também e -spara mostrar o processo pai também:

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

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

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

Isso indica pspara escrever o PID pai e o PID de todos os processos (sem títulos) e, em seguida, usa awkpara ver quais linhas têm o PID fornecido no primeiro campo (o PID pai) e imprime o segundo campo correspondente (o PID filho).

muru
fonte
10

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

ps --ppid 123

Você pode combinar isso com o pidofcomando para obter os filhos de um processo pelo nome, ou seja, com um processo chamadofoo

ps --ppid $(pidof foo)
chave de aço
fonte
10

Outra opção é usar o System Monitor (vem pré-instalado). Na barra de menus do SM, marque a opção "Dependencies", em "View", para obter um feedback visual, mostrando processos de pais e filhos como o 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 seu tempo sabiamente aprendendo os comandos básicos, em aplicações GUI ou pelo menos sejam capazes de dominar ambos. certo grau!

insira a descrição da imagem aqui insira a descrição da imagem aqui

v2r
fonte
1
OT: Que tema é esse?
Muru
1
Eu uso o Ubuntu + GnomeShell 3.2.1 O tema é chamado "AdwaitaDark", que é um tema GTK3, mas é personalizado e não está disponível, como você vê nas capturas de tela.
v2r 18/08/14
6

Não sou especialista, mas ao ler 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. De fato, existe: para um processo com o código de identificação $ 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 através 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 tenho certeza de quão portátil isso está além dos sistemas Linux, no entanto.

andybuckley
fonte
1
Se a portabilidade for uma preocupação: ps -o ppid= -o pid= -A | awk '$1 == <some pid>' | cut -f2deve ser compatível com POSIX.
Muru