Réponses:
La clé est la commande "wait":
#!/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 $!;
Avec waitvous pouvez avoir la granularité dont vous avez besoin:
sleep 1 &
PID1=$!
sleep 2 &
PID2=$!
wait $PID1
echo 'PID1 has ended.'
wait
echo 'All background processes have exited.'
Voici une façon de le faire:
launch backgroundprocess &
PROC_ID=$!
while kill -0 "$PROC_ID" >/dev/null 2>&1; do
echo "PROCESS IS RUNNING"
done
echo "PROCESS TERMINATED"
exit 0
waitEst probablement plus approprié pour cela?
Vous pouvez exécuter votre processus avec nohup et écrire un script shell pour lire le fichier nohup.out utilisé par nohup pour se connecter.
nohup command &
nohupn'écrit rien nohup.out; il crée simplement le fichier et y redirige la sortie de la commande. (2) Si la commande ne produit aucun résultat, rien ne sera écrit nohup.out, et cette idée ne va nulle part. (3) Même si la commandsortie en écriture, comment savoir quand elle se termine en surveillant cette sortie?
lsofpour voir si nohuputilise encore nohup.out, mais je suis d'accord c'est une méthode très poilue.
commandcommence à courir, nohupest parti. (1) Oui, je répète un chiffre, parce que je répète ce que j'ai dit il y a deux ans: nohupn'écrit rien nohup.out. (5) Oui, vous pouvez écrire un script shell à boucler et à exécuter lsofpour voir s’il nohup.outest toujours ouvert. Mais ce serait une réponse différente. (6) Même si vous faisiez cela, ce ne serait pas fiable. Et si un autre processus ouvrait le nohup.outfichier? Vous voulez vraiment vérifier si ce processus spécifique est nohup.outouvert. (7) Mais, si vous allez faire cela, pourquoi ne pas simplement vérifier si le processus est en cours d'exécution?