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-complete
mas 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