J'écris un script, mais il y a quelque chose dont j'ai besoin et que je ne trouve pas de moyen de le faire ...
J'ai besoin de faire une commande en arrière-plan "command1 &" puis quelque part dans le script, je dois attendre qu'elle se termine avant de faire command2. Fondamentalement, j'ai besoin de ceci:
REMARQUE: chaque commande s'exécute dans un répertoire spécifique! à la fin de la boucle while, ma commande1 a créé 4 répertoires, dans lesquels chacun exécute le processus spécifique, de sorte que le total des processus en cours est de 4
a=1
while [$a -lt 4 ]
. command1
#Generates 1 Process
a= `export $a +1`
done
#Wait until the 4 process end and then run the command2
. command2
J'ai vu quelque chose sur une wait
commande avec le numéro de processus pid, mais cela n'a pas fonctionné également.
shell
scripting
background-process
Joao Macau
la source
la source
command1
? Pouvez-vous le modifier pour qu'il renvoie les PID des 4 processus?$!
variable pour l'obtenir, en la passant à lawait
commande comme je l'ai montré ici.$!
contient le dernier PID en arrière-plan, tandis que$$
contient le dernier PID de l'exécution du processus.Réponses:
Vous pouvez utiliser la commande
wait PID
pour attendre la fin d'un processus.Vous pouvez également récupérer le PID de la dernière commande avec
$!
Dans votre cas, quelque chose comme ça fonctionnerait:
Après votre modification, comme vous avez plusieurs PID et que vous les connaissez, vous pouvez le faire:
la source
La façon la plus propre de le faire serait d'avoir à votre
comamnd1
retour les PID des processus lancés et d'utiliserwait
chacun d'eux comme le suggère la réponse de @ LaurentC .Une autre approche serait quelque chose comme ceci:
la source
Si vous utilisez la méthode suivante, vous n'aurez peut-être pas besoin d'une "attente de tous les processus" spéciale après la boucle while. La boucle attendra la fin du courant
command1
avant de revenir en haut. Veuillez faire attention comme pour tout conseil. Remarquez, la seule chose que j'ai faite a été d'ajouter& wait $!
à la fin de votrecommand1
.la source