Disons que j'ai un script Bash qui exécute trois scripts en parallèle maintenant, disons que ./script4 dépend de script1, script2 et script3. Comment puis-je forcer à attendre ceux-ci, tout en exécutant toujours les trois scripts en parallèle? P> p>
3 Réponses :
à partir de la page Bash code> Man: wait [n ...]
Wait for each specified process and return its termination status.
Each `n` may be a process ID or a job specification.... If `n` is not
given, all currently active child processes are waited for, and the return
status is zero.
+1. Rien de tel que de faire un chèque de base dans la documentation pour répondre aux questions ....
@Carlnorum: True, mais parfois, vous devez savoir ce que vous recherchez avant de pouvoir le trouver! Même les programmeurs expérimentés ont besoin d'un pointeur sur les bons docs de temps en temps.
Vous pouvez utiliser Attendez que chaque processus spécifié complète et renvoie sa résiliation
statut. p>
attendre code> une Dans la commande disponible dans bash et dans d'autres coquilles. de
(voir la commande équivalente waitfor sous Windows) sup> = "http://sss64.com/bash/wait.html" rel = "nofollow">
wait code> documentation h3>
./script1 & echo $! >1.pid
./script2 & echo $! >2.pid
./script3 & echo $! >3.pid
wait $(<1.pid) $(<2.pid) $(<3.pid)
rm 1.pid 2.pid 3.pid # clean up
./script4
J'ai fouillé quelque chose il y a rapidement des années, mais maintenant je voulais un parallélisme imbriqué. C'est ce que j'ai proposé:
eisbaw@leno:~$ time (bash_parallel "sleep 10" "sleep 5") bash_parallel started PID 30183: sleep 10 bash_parallel started PID 30184: sleep 5 bash_parallel waiting for PIDs: 30183 30184 real 0m10.007s user 0m0.000s sys 0m0.004s