Como obtenho o ID do processo pai de um determinado processo filho?

34

Como obter o pai pid de um determinado filho pid?

Eu sei que posso mannully verificá-lo em / proc, pergunto-me se existe uma maneira inteligente / melhor para conseguir isso no Ubuntu. Observe que o pai pode ou não ser morto.

Obrigado

    
por cache 21.06.2012 / 08:15

3 respostas

40

Como obter um PID pai (PPID) de um ID de processo (PID) de criança usando a linha de comando

Use ps -o ppid=

  • por exemplo. ps -o ppid= 2072 retorna 2061 , que você pode facilmente usar em um script etc. ps -o ppid= -C foo fornece o PPID do processo com o comando foo . Você também pode usar o antigo ps | grep : ps -eo ppid,comm | grep '[f]oo' .
  • Explicação mais completa: ps -f 2072 retornos
    UID        PID  PPID  C STIME TTY      STAT   TIME CMD
    izx       2072  2061  0 07:16 ?        S      0:00 /usr/lib/pulseaudio/pulse/gconf-helper
    
  • A relação pstree é: pstree -s -p 2072 :
    init(1)───pulseaudio(2061)───gconf-helper(2072)
    
por ish 21.06.2012 / 08:27
2

Usando apenas a shell variável para obter o pai PID:

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

Explicação

  • $PPID é definido pelo shell, é o PID do processo pai
  • em /proc/ , você tem alguns diretórios com o PID de cada processo. Então, se você cat /proc/$PPID/comm , você ecoará o nome do comando do PID

Verifique o man proc

    
por Gilles Quenot 06.03.2018 / 01:20
0

Usando pstree pelo nome do comando

Usando pstree , você pode pesquisar pelo nome do processo filho e obter o ID do processo (PID) junto com os pais, avós e qualquer filho 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 seu PID é 8414 . Seu ID pai é 841 e é chamado de display-auto-brightness . O avô é um shell ( sh ) com um ID de processo de 839 . O bisavô é cron com um ID de processo de 795 . O tataravô também é cron com um ID de processo de 763 .

Se você quiser pesquisar por ID de processo de sleep em vez de nome, use:

$ pstree -hp | grep 14653
           |-cron(763)---cron(795)---sh(839)---display-auto-br(841)---sleep(14653)

Observe que o ID% do processo sleep foi alterado para 14653 . O pai (PID 841) dorme por 1 minuto, acorda por uma fração de segundo e, em seguida, inicia um novo comando sleep , que recebe um novo ID de processo. Esse é outro motivo pelo qual pesquisar por sleep é mais fácil do que pesquisar por ID de 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 essa pergunta.

Para ver uma cadeia aninhada por todo o 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

Observação: Mais um minuto se passou e o comando sleep recebe um novo PID (8541).

    
por WinEunuuchs2Unix 06.03.2018 / 05:03