A chave é o comando "wait":
#!/bin/bash
/my/process &
/another/process &
wait
echo "All processes done!"
Como posso iniciar um processo em segundo plano e verificar quando ele termina em um script bash? Minha ideia é um roteiro como este:
launch backgroundprocess &
while [ Process is running ];do
echo "PROCESS IS RUNNING\r"
done;
echo "PROCESS TERMINATED"
Com wait
, você pode ter a granularidade de que precisa:
sleep 1 &
PID1=$!
sleep 2 &
PID2=$!
wait $PID1
echo 'PID1 has ended.'
wait
echo 'All background processes have exited.'
Aqui está uma maneira de fazer isso:
launch backgroundprocess &
PROC_ID=$!
while kill -0 "$PROC_ID" >/dev/null 2>&1; do
echo "PROCESS IS RUNNING"
done
echo "PROCESS TERMINATED"
exit 0
Você pode executar o seu processo com nohup e escrever o shell script para ler o arquivo nohup.out que o nohup usa para registrar.
nohup command &
Tags bash