Localizando o número de processos filhos de um processo específico

5

Eu tenho um script Python que gera alguns subprocessos, mas nunca mais que n de cada vez.

Eu quero escrever um script de shell para confirmar que ele não tem mais de n de subprocessos a qualquer momento, mas também que geralmente ele tem n processos em execução.

Se eu tiver o PID do programa Python dentro de um script de shell, como faço para verificar o número de subprocessos que esse PID tem atualmente? Por exemplo,

python script.py &
pid=$!
while true
do
    # do something that prints number of subprocesses of
    # the process $pid to stdout
    sleep 1
done
    
por Gregory Nisbet 02.04.2016 / 03:36

3 respostas

4
ps -eo ppid= | grep -Fwc $pid

Se o seu grep não suporta -w :

ps -eo ppid= | tr -d '[:blank:]' | grep -Fxc $pid

ou

ps -eo ppid= | awk '$1==ppid {++i} END {print i+0}' ppid=$pid

ou (sufocando os parâmetros posicionais)

set $(ps -eo ppid=); echo $#

Observe que isso não é atômico, portanto, a contagem pode estar errada se alguns processos morrerem e outros forem gerados no curto espaço de tempo necessário para coletar os dados.

    
por 02.04.2016 / 08:17
3

Experimente ps --ppid ${pid} --no-headers | wc --lines .

    
por 02.04.2016 / 18:09
1

Se pgrep estiver disponível, filtre por pid pai [ -P ]:

sproc_pids=( $(pgrep -P $pid) ) && echo ${#sproc_pids[@]}
    
por 02.04.2016 / 04:28

Tags