BASH: inicia o processo em segundo plano e verifica quando termina

28

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"
    
por 0wn3r 22.05.2013 / 14:34

4 respostas

56

A chave é o comando "wait":

#!/bin/bash

/my/process &
/another/process &
wait
echo "All processes done!"
    
por 22.05.2013 / 14:39
26

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.'
    
por 22.05.2013 / 15:57
25

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
    
por 22.05.2013 / 14:42
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 &
    
por 22.05.2013 / 14:37

Tags