Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1491 connectés 

  FORUM HardWare.fr
  Programmation
  Shell/Batch

  [bash] wait pour n'attendre qu'un seul fils

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[bash] wait pour n'attendre qu'un seul fils

n°1979201
Lan Wezel
Posté le 30-03-2010 à 22:05:54  profilanswer
 

Bonjour,
 
Tout n'est pas dans le titre.
Dans le shell, la fonction wait permet soit d'attendre tous les fils, soit un fils ciblé par son PID si je ne m'abuse.
J'aimerais coder le comportement suivant.  
 
J'ai plein de runs différents à faire, mais je voudrais n'en avoir que N différents en même temps.
 

Code :
  1. CPT=0
  2. for filename in *
  3. do
  4.   monExe filename&
  5.   CPT=$((CPT + 1))
  6.   if [ CPT -eq 3 ]
  7.   then
  8.     # j'attends que l'un des runs soit fini pour en relancer un autre
  9.   fi
  10. done


 
Mon problème est que mettre un wait me ferai attendre les 3, je n'optimise donc pas mon utilisation des ressources.
 
Merci d'avance pour vos réponses ;-)

mood
Publicité
Posté le 30-03-2010 à 22:05:54  profilanswer
 

n°1979250
Elmoricq
Modérateur
Posté le 30-03-2010 à 23:51:24  profilanswer
 

Tu peux toujours tracer le nombre de "monExe" en cours d'exécution avec ps, dans une boucle while qui ne sort que si ce nombre de processus est < au nombre max de processus voulus.
 
Sinon, d'habitude je passe pour faire ce genre de chose par un p'tit script perl écrit à l'arrache, qui fork en créant un fichier flag (avec le PID dans le nom du fichier) et le détruit en sortant, et le processus père qui lance un nouveau fils dès que le nombre de fichier flag est < au nombre de processus parallèle désiré.

n°1979260
Lan Wezel
Posté le 31-03-2010 à 00:19:11  profilanswer
 

J'aime bien l'astuce, mais par contre je vois pas pourquoi il y a besoin de passer par un script perl pour créer les fichiers flags.
 
En fait, au départ je me demandais si on pouvait pas tripatouiller wait du shell pour avoir un comportement proche du wait() en C.
 
Mici ;-)

n°1979321
Elmoricq
Modérateur
Posté le 31-03-2010 à 10:23:49  profilanswer
 

Lan Wezel a écrit :

J'aime bien l'astuce, mais par contre je vois pas pourquoi il y a besoin de passer par un script perl pour créer les fichiers flags.

 

Euh non je n'ai pas dit ça, je dis juste que c'est ce que moi je fais. Parce que je trouve ça plus pratique, rien de plus.

 
Lan Wezel a écrit :

En fait, au départ je me demandais si on pouvait pas tripatouiller wait du shell pour avoir un comportement proche du wait() en C.

 

Ben le seul moyen d'émuler ce comportement, c'est justement une boucle qui scanne le nombre de processus actifs. Je ne connais pas de moyen de faire la même chose avec la commande wait du shell.


Message édité par Elmoricq le 31-03-2010 à 10:24:10
n°1983567
Kerrozen
To be or not to be ... cool ..
Posté le 13-04-2010 à 13:10:44  profilanswer
 

Sinon truc de Sioux :  
 
1/ Stocker la liste des noms des binaires dans un tableau pour pouvoir utiliser un pointeur plus facilement (une variable "position" exportée au début du script principal)
 
2/ Utiliser un mini-shell lancé en boucle en tâche de fond dans ton script principal pour appeler tes binaires, ce mini-shell encapsule la création / destruction du fameux flag dont parle Elmoricq, avec pour le coup un wait  du binaire qu'il lance.
 
3/ Dans ton shell chapeau, tu utilises une boucle avec un sleep qui sort quand plus de flag présent. Cette boucle vient vérifier régulièrement le nombre de flag présents : si = 0 tu sors (condition de la boucle), s'il est inférieur à 3, alors tu incrémentes ta variable "position" et si la case du tableau existe (donc encore des scripts à lancer) tu utilises le mini-shell pour lancer un nouveau binaire.
 
Bon ok , fais à l'arrache comme ça je sais pas si je suis très clair  :bounce:  :pt1cable:  :heink:  :cry:  ? Sinon hésite pas, j'essayerai de développer un peu plus clairement (là j'ai la flemme de développer un petit exemple  :sarcastic:


---------------
En programmation, quand t'as un problème et qu'il n'y a que deux solutions valides, seule la troisième fonctionne !

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Shell/Batch

  [bash] wait pour n'attendre qu'un seul fils

 

Sujets relatifs
Regrouper plusieurs registres en un seulC - attendre n milliseconds entre 2 iterations d'une boucle
[Résolu] htaccess change tout seul...[BASH] automatisation de copie de CD
[D7]Clavier et Application.ProcessMessagesJe n'arrive pas à le faire avec Excel seul.
Correction script bashscript bash
Récupérer certains fils d'un phpbb2 ?Besoin d'aide pour script Bash
Plus de sujets relatifs à : [bash] wait pour n'attendre qu'un seul fils


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR