Waitpid script shell

Fermé
lelfe - 17 sept. 2007 à 14:27
dubcek Messages postés 18755 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 14 novembre 2024 - 17 sept. 2007 à 15:32
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

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
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
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 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897
17 sept. 2007 à 14:29
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 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897
17 sept. 2007 à 14:32
Tiens le voilà ;-))
-1
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897
17 sept. 2007 à 14:42
Normalement oui ;-))
-1
dubcek Messages postés 18755 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 14 novembre 2024 5 621
17 sept. 2007 à 15:32
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