Como obter o PID pai de um determinado processo no GNU / Linux na linha de comando?

90

Resolvido antes de ser perguntado: cat /proc/1111/status | grep PPid

Vi.
fonte
mais rápido: grep PPid status |cut -f2como em time(for((i=0;i<1000;i++));do grep PPid status |cut -f2 >/dev/null;done); pergunto se há algo ainda mais rápido?
Aquarius Power
1
@AquariusPower Como você pergunta, o fgrep é mais rápido que o grep. fgrep PPid status |cut -f2
jbo5112
O sed é muito mais rápido que o grep and cut: #sed -rn '/PPid/ s/^.*:\s+// p' < status
Marian

Respostas:

108

Linha de comando:

ps -o ppid= -p 1111

Função:

ppid () { ps -p ${1:-$$} -o ppid=; }

Alias ​​(uma função é preferível ):

alias ppid='ps -o ppid= -p'

Roteiro:

#!/bin/sh
pid=$1
if [ -z $pid ]
then
    read -p "PID: " pid
fi
ps -p ${pid:-$$} -o ppid=

Se nenhum PID for fornecido para a função ou o script, eles serão padrão para mostrar o PPID do processo atual.

Para usar o alias, um PID deve ser fornecido.

Dennis Williamson
fonte
O =sinal não é necessário, pelo menos no OS X 10.8.2.
jtbandes
5
@jtbandes: O sinal de igual conforme usado aqui suprime a saída da linha de cabeçalho ( Linux e OS X ).
Dennis Williamson
13

Essa é uma daquelas coisas que eu aprendo, esqueço, reaprendo, repito. Mas é útil. A bandeira do comando pstree mostra uma árvore com uma folha em N:

pstree -sA $(pgrep badblocks)
systemd---sudo---mkfs.ext4---badblocks
user194394
fonte
12

O pid pai está na variável PPID do shell, então

echo $PPID
Ivan Novotny
fonte
1
Sim, mas 1. Quero o pai pid de outro processo, 2. Quero poder atravessar todos os ancestrais para iniciar.
Vi.
1
Por outro lado, o uso $PPIDacabou de resolver o problema para o qual o Google sugeriu esta página como resposta.
Paul Whittaker
12

Para imprimir os IDs pai ( PPID) de todos os processos, use este comando:

ps j

Para o único processo, basta passar o PID, como: ps j 1234.

Para extrair apenas o valor, filtre a saída por awk, como:

ps j | awk 'NR>1 {print $3}' # BSD ps
ps j | awk 'NR>1 {print $1}' # GNU ps

Para listar PIDs de todos os pais, use pstree(instale-o se não o tiver):

$ pstree -sg 1234
systemd(1)───sshd(1036)───bash(2383)───pstree(3007)

Para obter o PID pai do processo atual, use echo $$.

kenorb
fonte
1
pstreeé o mais legal que eu já vi aqui.
sudo
ps jé ótimo porque está disponível em muitas distros e é facilmente comporável
Connor McCormick
6

Leia / proc / $ PID / status. Pode ser facilmente script:

#! / bin / sh
P = $ 1
se [-z "$ P"]; então
    leia P
fi
cat / proc / "$ P" / status | grep PPid: | grep -o "[0-9] *"
Vi.
fonte
2
grep '^PPid:' /proc/$1/status | grep -o '[0-9]*'é tudo o que você precisa. (É muito raro para obter ferramentas Unix para fazer a if [ -z ]; then readcoisa.)
grawity
@rawity Ajuda a fazer coisas comoecho $$ | ppid | ppid | ppid
Vi.
2
Uso inútil de gato UUOC
Felipe Alvarez
@FelipeAlvarez, Minhas mãos não estão acostumadas a digitar < /some/file grep | grep | ....
Vi.
2
Que talgrep /some/file
Felipe Alvarez
4

No Linux:

ps hoppid $thatprocess
jthill
fonte
2
$ ps -p $(ps -p $(echo $$) -o ppid=) -o comm=
    tmux

Um exemplo um pouco mais complexo que verifica o comando de um pai que iniciou o processo atual Altere comm = para cmd = para ver o comando completo

sebastian_t
fonte
Uso inútil de eco ? ;)
bobbogo 12/12
Na verdade, é necessário em alguns terminais. Para ser sincero, não me lembro exatamente, mas na verdade resolveu um problema. : D
sebastian_t
1

Aqui está uma solução rápida que também deve funcionar:

ps $$
Gevork Palyan
fonte
Isso não fornece ao PID pai o que o OP solicitou.
Dennis Williamson
1

Corra topcom as opções que desejar, como -u username and -p PID.

Enquanto toppressiona f, ele mostra uma lista de opções que você deseja exibir na topsaída, e os parâmetros exibidos serão mostrados em letras maiúsculas e os parâmetros que serão exibidos ou não serão mostrados em letras minúsculas.

Portanto, digitando a letra antes do parâmetro, você pode habilitá-lo ou desabilitá-lo. Para o ID do processo pai, você deve digitar be pressionar Enter, ele exibirá o PPID na saída superior.

Praveen S.
fonte
1
É para ser usado de forma não interativa. Eu já sei que em htopvocê pode configurar a PPIDcoluna.
Vi.