Pause dans l'exécution du script

Bonjour,

je voudrai lancer l’exécution d’un programme par un script et que ce script attende la fin du programme avant de poursuivre la lecture du fichier bash. Ne connaissant pas le temps exact d’exécution du programme, je tiens à éviter la commande sleep. Auriez vous une idée pour procéder ?

Merci :006

Il me semble que le fork correspond à ce que tu veux faire (un processus pere lance un processus fils, et se met en attente jusqu’à ce que le processus fils termine puis reprend sa course)
Je l’avais étudié en cours de C, mais ca doit exister aussi en bash

Bonjour,

Si tu souhaites attendre la fin du programme, c’est que tu dois probablement le lancer en fond de tâche. Si c’est le cas, je n’en vois pas l’intérêt dcar il suffit de lancer normalement et la suite de ton script s’effectuera une fois qu’il se terminera.

Mais bon, si tu tiens tout de même à le lancer en background :

<début script>
programme &
wait %+
<suite script>

Ensuite, il est possible que le programme se détache tout seul du processus parent. Dans ce cas, ce n’est pas facile et il faut vérifier la liste des process jusqu’à ce qu’il n’existe plus.

Merci je vais regarder ça. :006

C’est un programme de calcul, le script est là pour exécuter le programme et changer dès que celui ci est terminé les variables de départ pour le ré-exécuter. Si je ne le fait pas tous les programmes sont exécutés au même moment bouffant tous les core des microprocesseurs (au nombre de 16… :smiley: )

[quote=“Cver1”]Merci je vais regarder ça. :006

C’est un programme de calcul, le script est là pour exécuter le programme et changer dès que celui ci est terminé les variables de départ pour le ré-exécuter. Si je ne le fait pas tous les programmes sont exécutés au même moment bouffant tous les core des microprocesseurs (au nombre de 16… :smiley: )[/quote]
Ben fait une boucle toute bête :

while [ bidule ]; do prog done

Mais c’est bien que tous les coeurs soient sollicités, le but est d’aller vite non? Si tu veux pouvoir faire d’autres choses avec ta machine, utilise nice. Mais rendre séquentiel un calcul pouvant se faire en parallèle sur un 16 coeur, c’est comme avoir un voiture 12 cylindres et ne vouloir en utiliser que 2…

+1, tu as 16 coeurs, autant les exploiter.
Pour cela, dans le meilleurs des mondes, tu peux lancer 16 fois ton programme en même temps (en //).
Cependant, il faut laisser des ressources aux autres processus et cela passe par la diminution du nombre de programme à lancer en même temps (à toi de voire les ressources nécessaires pour le reste, je ne peux pas y répondre, toi seul le peut en fonction de ce qui tourne dessus).

Tu peux donc mettre en place un système de parallélisation. Normalement, le système est suffisamment intelligent pour répartir les charges sur l’ensemble de tes coeurs mais il existe des outils tel que schedtool pour gérer l’affinité des processus avec les coeurs/processeurs. Mais tout dépend de ton système.

Tu peux peut-être te baser sur un script que j’ai écris.

Je reviens à mon problème qui est maintenant résolu par la plus bête des méthodes mais qui m’aura malgré tout bien fait suer. Quelques explications :

[*] Oui je comptais bien utiliser les cores de la machine. Mais le programme avait un temps d’exécution de 30 mins à 1 heure. Je me vois mal attendre la fin de son execution pour changer ses paramètres sachant que je dois l’exécuter avec environ 500 combinaisons différentes… Il me fallait donc régler le problème pour un core puis l’appliquer pour utiliser les autres.

[*] Pour mon problème, dans le programme, plutot complexe et qui n’est pas de moi, il y avait à la fin de la ligne lançant l’exécutable du fichier run un &. Du coup un wait($!) par exemple était sans effet. J’ai corrigé le problème en le virant et en ajoutant tout simplement un && à mon script : ./run.bat && C’était tout bête… :blush:

[*] Ce problème étant résolu j’ai pu exécuter le script (de paramètres différents) plusieurs fois pour utiliser les différents core de la machine.

Merci de vous êtes penché pour mon problème et désolé pour le délais entre mes posts. :006