7
votes

La barrière à bash peut-elle être faite facilement?

Disons que j'ai un script Bash qui exécute trois scripts en parallèle xxx

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?


0 commentaires

3 Réponses :


6
votes

à 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.


2 commentaires

+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.



9
votes

Vous pouvez utiliser 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>

Attendez que chaque processus spécifié complète et renvoie sa résiliation statut. p>

./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


0 commentaires

1
votes

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


0 commentaires