Parece que você tem dois PIDs e quer saber se um é descendente do outro. Em caso afirmativo, você pode usar isto:
#!/bin/bash
# Checks the process tree checking to see if PID $1 is an ancestor of
# PID $2. Returns true/false (0/1).
# (Needs error handling to determine if $1 and $2 are provided and both
# are numeric. Left as an exercise for the reader.)
ps -ea -o pid,ppid |
awk '{ parent[$1] = $2 }
END { if (parent[start] == "")
exit 1
while (lookfor != parent[start] && start != 1)
start = parent[start]
exit start==1 ? 1 : 0
}' lookfor="$1" start="$2"
postagem original:
Depende de qual é o seu objetivo final. Se você está tentando determinar se dois processos foram iniciados a partir da mesma sessão de terminal, por exemplo, você pode usar a opção -o
de ps
e dizer para imprimir o id do grupo de sessão (o shell de login sempre inicia um nova sessão e todos os descendentes recebem esse id de sessão).
Se você tiver algum outro objetivo em mente ou sua situação tiver que ser responsável por processos que não sejam de login, a análise da saída de ps
provavelmente será o melhor caminho a seguir. Eu daria um exemplo em awk
, mas não tenho certeza do que você está procurando, então não sei qual saída seria mais adequada às suas necessidades.