Waitpid script shell

lelfe -  
dubcek Messages postés 19021 Statut Contributeur -
Bonjour à tous,


Débutante en unix, je dois modifier un script shell qui lance differents programmes permettant des realiser des calculs. Chaque résultat de calcul est ecrit dans un fichier, qui est utilisé pour le calcul suivant.
Le probleme actuellement, c'est que des fois le fichier n'est pas totalement ecrit avant que l'autre calcul soit declanché (le script utilise des sleep), ce qui declenche donc une erreur, et tous les calculs continuent à s'enchainer malgré tout.
En cherchant, j'ai trouvé un truc "waitpid" qui me parait interessant pour ce probleme, j'ai trouvé les pages de manuel, etc. Mais sur un forum j'ai lu ça "Tu ne peux pas utiliser fork et waitpid dans un script sh. Ces fonctions s'utilisent dans un programme compilé, la plupart du temps en C, ou alors dans un langage de script plus puissant comme le python ou le perl.... Bref dans un langage qui a accés aux fonctions de base du système. "
Confirmez vous le fait qu'on ne puisse pas utiliser "waitpid" dans un shell ? si oui, que puis-je utiliser pour etre sure que mes processus soient bien finis avant d'en demarrer un autre ?
A voir également:

7 réponses

lelfe
 
merci, je regarde ça ;)
j'espere que ce n'est pas trop compliqué à mettre en place, il faudrait que la correction soit faire sous 2 jours max :$
0
lelfe
 
ok..a priori c pas compliqué : tu rajoutes & à la fin de la commande à attendre, suivi d'un wait pour l'instruction suivante...
je peux donc enchainer plusieurs fois cette structure sans problème ?
question subsidiaire : dans ton exemple c'est un shell que tu executes en tache de fond, ca fonctionne aussi avec des programmes "externes" ? (je pense que oui, mais vaut mieux confirmer quand meme ;) )
0
lelfe
 
dernieres questions :
y-a-t-il moyen d'intercepter des erreurs s'il y a un probleme lors de l'execution du programme "externe" ? si oui, comment (un code d'erreur je suppose, mais quelle serait sa valeur !=0 ??)
et enfin ce script est susceptible d'etre porté sous linux...je ne pense pas non plus que ca pose probleme..tu confirmes aussi ??
en tout cas merci beaucoup pour ton aide ;)
0
jipicy Messages postés 41342 Statut Modérateur 4 896
 
Salut,

Par contre tu peux utiliser la commande "wait" en lançant chaque commande précédente en arrière-plan...

il y a un thread sur le forum qui en parle, je le cherche et je poste.
-1

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
jipicy Messages postés 41342 Statut Modérateur 4 896
 
Tiens le voilà ;-))
-1
jipicy Messages postés 41342 Statut Modérateur 4 896
 
Normalement oui ;-))
-1
dubcek Messages postés 19021 Statut Contributeur 5 637
 
il est possible de lancer les commandes séquentiellement, cmd2 ne démarre que quand cmd1 a terminé:
cmd1 > fichier ; cmd2 < fichier
et pour en lancer plusieurs:
(cmd1 > fichier ; cmd2 < fichier) &
(cmd1> fichier2 ; cmd3 < fichier2) &
-1