Atravessar a árvore de processos

2

Estou ciente de que os processos são organizados na forma de uma hierarquia. Então, se eu quiser implementar uma operação que determine se um determinado processo pertence a uma subárvore específica na hierarquia por rastrear de volta ao processo pai até a raiz da subárvore, será um custo muito alto?

    
por Xin Li 04.05.2015 / 23:31

1 resposta

2

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.

    
por 05.05.2015 / 01:48

Tags