Respuestas:
La clave es el comando "esperar":
#!/bin/bash
/my/process &
/another/process &
wait
echo "All processes done!"
cmd1 & p=$!; cmd2 & q=$!; while sleep 1; do echo still running ; done& wait $p $q; kill $!;
Con waitusted puede tener la granularidad que necesita:
sleep 1 &
PID1=$!
sleep 2 &
PID2=$!
wait $PID1
echo 'PID1 has ended.'
wait
echo 'All background processes have exited.'
Aquí hay una forma de hacerlo:
launch backgroundprocess &
PROC_ID=$!
while kill -0 "$PROC_ID" >/dev/null 2>&1; do
echo "PROCESS IS RUNNING"
done
echo "PROCESS TERMINATED"
exit 0
waites 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.
nohup command &
nohupno escribe nada nohup.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á nada nohup.out, y esta idea no va a ninguna parte rápidamente. (3) Incluso si commandescribe salida, ¿cómo puede saber cuándo termina monitoreando esa salida?
lsofpara ver si nohuptodavía está usando nohup.out, pero estoy de acuerdo en que este es un método muy complicado.
commandcomienza a correr, nohupse ha ido. (1) Sí, estoy repitiendo un número, porque estoy repitiendo lo que dije hace dos años: nohupno escribe nada nohup.out. (5) Sí, podría escribir un script de shell para ejecutar y ejecutar lsofpara 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 el nohup.outarchivo? Realmente querrás comprobar si este proceso específico se había nohup.outabierto. (7) Pero, si vas a hacer eso, ¿por qué no solo verificas si el proceso se está ejecutando?