existe alguma maneira de saber quem são filhos do processo específico? por exemplo, aqueles filhos cujo ID pai é foo?
existe alguma maneira de saber quem são filhos do processo específico? por exemplo, aqueles filhos cujo ID pai é foo?
Respostas:
Você está procurando o pstree
comando
pstree
por si só, listará todos os processos em forma de árvore (como lsblk
faz). Você pode usar o -p
sinalizador para obter os PIDs listados também e -s
para 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 ps
para escrever o PID pai e o PID de todos os processos (sem títulos) e, em seguida, usa awk
para ver quais linhas têm o PID fornecido no primeiro campo (o PID pai) e imprime o segundo campo correspondente (o PID filho).
Se você deseja 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 pidof
comando para obter os filhos de um processo pelo nome, ou seja, com um processo chamadofoo
ps --ppid $(pidof foo)
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!
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.
ps -o ppid= -o pid= -A | awk '$1 == <some pid>' | cut -f2
deve ser compatível com POSIX.