Respostas:
Usar ps -o ppid=
ps -o ppid= 2072
retorna 2061
, que você pode usar facilmente em um script, etc. ps -o ppid= -C foo
fornece o PPID do processo com comando foo
. Você também pode usar o antiquado ps | grep
: ps -eo ppid,comm | grep '[f]oo'
.ps -f 2072
retornos
UID PID PPID C TEMPO DE STAT TTY STAT CMD izx 2072 2061 0 07:16? S 0:00 / usr / lib / pulseaudio / pulse / gconf-helper
pstree
relação é pstree -s -p 2072
:
Você está em: Home '' Diretório do Produto '' Artes e Artesanatos '' Artes Visuais
ppid=
mas antes do pid, parece necessário. Eu obtive resultados diferentes se o omiti.
echo $PPID
se você precisar do comando deste pai pid:
cat /proc/$PPID/comm
se você precisar da linha de comando completa (com todas as opções):
cat /proc/$PPID/cmdline
$PPID
é definido pelo shell, é o PID do processo pai/proc/
, você tem alguns diretórios com o PID de cada processo. Então, se você cat /proc/$PPID/comm
ecoar o nome do comando do PIDPPID
é definido como parte do padrão POSIX, portanto, qualquer shell compatível com POSIX deve defini-lo adequadamente. Veja pubs.opengroup.org/onlinepubs/9699919799/utilities/…
pstree
pelo nome do comandoUtilizando pstree
você pode procurar pelo nome do processo filho e obter o ID do Processo (PID) junto com os pais, avós e quaisquer filhos do processo filho:
$ pstree -hp | grep sleep
|-cron(763)---cron(795)---sh(839)---display-auto-br(841)---sleep(8414)
Nesse caso, sleep
é o comando filho e é o PID 8414
. Seu ID pai é 841 e é chamado display-auto-brightness
. O avô é um shell ( sh
) com um ID de processo de 839
. O bisavô está cron
com um ID de processo de 795
. O tataravô também cron
tem um ID de processo 763
.
Se você deseja pesquisar por ID do processo em sleep
vez de nome, pode usar:
$ pstree -hp | grep 14653
|-cron(763)---cron(795)---sh(839)---display-auto-br(841)---sleep(14653)
Observe que o sleep
ID do processo foi alterado para 14653
. O pai (PID 841) dorme por 1 minuto, acorda por uma fração de segundo e inicia um novo sleep
comando que obtém um novo ID de processo. Esse é outro motivo pelo qual pesquisar sleep
é mais fácil do que pesquisar por ID do processo.
Este código foi retirado de: Ajustar automaticamente o brilho da tela com base no nascer e pôr do sol e adaptado a esta pergunta.
Para ver uma cadeia aninhada no processo de inicialização, use o PID em vez do nome:
$ pstree -aps 8541
systemd,1 splash fastboot kaslr
└─cron,763 -f
└─cron,795 -f
└─sh,839 -c /usr/local/bin/display-auto-brightness
└─display-auto-br,841 /usr/local/bin/display-auto-brightness
└─sleep,8541 60
Nota: Outro minuto se passou e o comando sleep recebe um novo PID (8541).
807
ou cron
a mesma linha seria recuperada, assim como mais filhos se surgisse. Mas a questão era encontrar o pai, não todas as crianças.
1
. Eu não acho que você pode matar o PID 1. #
ps -efj
também pode ser usado para o mesmo.
Por exemplo,
> ps -efj | head
UID PID PPID PGID SID C STIME TTY TIME CMD
root 1 0 1 1 0 Jul01 ? 00:00:13 /sbin/init splash
root 2 0 0 0 0 Jul01 ? 00:00:00 [kthreadd]
root 3 2 0 0 0 Jul01 ? 00:00:02 [ksoftirqd/0]
root 5 2 0 0 0 Jul01 ? 00:00:00 [kworker/0:0H]
root 7 2 0 0 0 Jul01 ? 00:06:44 [rcu_sched]
root 8 2 0 0 0 Jul01 ? 00:00:00 [rcu_bh]
root 9 2 0 0 0 Jul01 ? 00:00:00 [migration/0]
root 10 2 0 0 0 Jul01 ? 00:00:08 [watchdog/0]
root 11 2 0 0 0 Jul01 ? 00:00:08 [watchdog/1]
ps -o args ...
dos resultados, mas isso tem um pouco de cheiro.