Como iniciar um processo em segundo plano e verificar quando ele termina em um script bash? Minha ideia é um script como este:
launch backgroundprocess &
while [ Process is running ];do
echo "PROCESS IS RUNNING\r"
done;
echo "PROCESS TERMINATED"
cmd1 & p=$!; cmd2 & q=$!; while sleep 1; do echo still running ; done& wait $p $q; kill $!;
Com
wait
você pode ter a granularidade necessária:fonte
Aqui está uma maneira de fazer isso:
fonte
wait
é mais adequado para isso?Você pode executar seu processo com nohup e escrever um script de shell para ler o arquivo nohup.out que o nohup usa para registrar.
fonte
nohup
não escreve nadanohup.out
; apenas cria o arquivo e redireciona a saída do comando para ele. (2) Se o comando não produzir nenhuma saída, nada será gravadonohup.out
, e essa ideia não vai a lugar nenhum rapidamente. (3) Mesmocommand
que a saída de gravação seja escrita, como você pode saber quando termina monitorando essa saída?lsof
para ver senohup
ainda está usandonohup.out
, mas eu concordo que este é um método muito cabeludo.command
começa a correr,nohup
já se foi. (1) Sim, estou repetindo um número, porque estou repetindo o que disse há dois anos:nohup
não escreve nada paranohup.out
. (5) Sim, você pode escrever um shell script para executar um loop e executarlsof
para ver senohup.out
ainda está aberto. Mas isso seria uma resposta diferente. (6) Mesmo se você fizesse isso, não seria confiável. E se algum outro processo abrisse onohup.out
arquivo? Você realmente deseja verificar se esse processo específico foinohup.out
aberto. (7) Mas, se você fizer isso, por que não apenas verificar se o processo está em execução?