Como posso obter apenas os processos de ancestralidade de um dado processo?

0

É correto que

  • pstree <pid> produzirá todos os processos descendentes do processo especificado

  • pstree -s <pid> produzirá todos os processos descendentes e processos de ancestralidade do processo especificado

Como posso obter apenas os processos de ancestralidade de um determinado processo?

Obrigado.

    
por Tim 28.07.2018 / 03:09

2 respostas

4

Você sempre pode percorrer a árvore de ancestral manualmente usando ps -o ppid= :

#! /bin/bash -
pid=${1?Please give a pid}
while
  [ "$pid" -gt 0 ] &&
    read -r ppid name < <(ps -o ppid= -o comm= -p "$pid")
do
  printf '%s\n' "$pid $name"
  pid=$ppid
done

Ou para evitar a execução de ps várias vezes:

#! /bin/sh -
pid=${1?Please give a pid}
ps -Ao pid= -o ppid= -o comm= |
  awk -v p="$pid" '
    {
      pid = $1; ppid[pid] = $2
      sub(/([[:space:]]*[[:digit:]]+){2}[[:space:]]*/, "")
      name[pid] = $0
    }
    END {
      while (p) {
        print p, name[p]
        p = ppid[p]
      }
    }'
    
por 28.07.2018 / 10:06
2

Você pode tentar seguir, eu encontrei na página man do Linux : -h  Isso destaca o processo atual e seus ancestrais. -n Isso classificará processos com o mesmo ancestral pelo PID em vez de pelo nome.

    
por 28.07.2018 / 05:30