Posso esperar que todos os processos bifurcados de um comando terminem?

Posso esperar que todos os processos bifurcados de um comando terminem?

Suponha que você execute FOO stars BAR em segundo plano. Como posso esperar o BAR terminar no shell? Quero uma solução em que não altere os aspectos internos do FOO (embora possa alterar os BAR de má vontade).

FOO

# Somehow wait on all forked processes of FOO

echo FOO and BAR have finished.

PS: O caso específico que tenho em mente é aguardar o script que o Aria2 executa, —-on-download-completemas gosto de poder resolver isso da maneira mais geral possível.

Responder1

Você pode fazer com que o BAR envie seu PID para um arquivo; em seguida, verifique até que o processo com esse PID não esteja mais em execução. Algo assim:

em BAR.sh:

#!/bin/bash
(echo $$)>/tmp/BAR.pid
...

em runFOO.sh:

#!/bin/bash
# possibly remove pid from previous run:
if [ -f /tmp/BAR.pid ]; then
  rm /tmp/BAR.pid
fi

# launch FOO
./FOO.sh &

# make sure BAR has started:
while [ ! -f /tmp/BAR.pid ]; do
  sleep 1
done

# wait for BAR to finnish: 
while [ $(kill -s 0 $( cat /tmp/BAR.pid ) 2>&1 | wc -l) -eq 0 ]; do
  sleep 1;
done

informação relacionada