¿Cómo puedo iniciar un proceso en segundo plano y verificar cuándo termina dentro de un script bash? Mi idea es un guión 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 $!;
Con
wait
usted puede tener la granularidad que necesita:fuente
Aquí hay una forma de hacerlo:
fuente
wait
es más adecuado para eso?Puede ejecutar su proceso con nohup y escribir un script de shell para leer el archivo nohup.out que nohup usa para iniciar sesión.
fuente
nohup
no escribe nadanohup.out
; simplemente crea el archivo y redirige la salida del comando hacia él. (2) Si el comando no produce ningún resultado, no se escribirá nadanohup.out
, y esta idea no va a ninguna parte rápidamente. (3) Incluso sicommand
escribe salida, ¿cómo puede saber cuándo termina monitoreando esa salida?lsof
para ver sinohup
todavía está usandonohup.out
, pero estoy de acuerdo en que este es un método muy complicado.command
comienza a correr,nohup
se ha ido. (1) Sí, estoy repitiendo un número, porque estoy repitiendo lo que dije hace dos años:nohup
no escribe nadanohup.out
. (5) Sí, podría escribir un script de shell para ejecutar y ejecutarlsof
para ver sinohup.out
todavía está abierto. Pero esa sería una respuesta diferente. (6) Incluso si hicieras eso, no sería confiable. ¿Qué pasa si algún otro proceso abre elnohup.out
archivo? Realmente querrás comprobar si este proceso específico se habíanohup.out
abierto. (7) Pero, si vas a hacer eso, ¿por qué no solo verificas si el proceso se está ejecutando?