Waitpid script shell
Fermé
lelfe
-
17 sept. 2007 à 14:27
dubcek Messages postés 18779 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 13 avril 2025 - 17 sept. 2007 à 15:32
dubcek Messages postés 18779 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 13 avril 2025 - 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 ?
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:
- Waitpid script shell
- Script vidéo youtube - Guide
- Classic shell windows 11 - Télécharger - Personnalisation
- Mas script - Accueil - Windows
- Ghost script - Télécharger - Polices de caractères
- Script cmd - Guide
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 :$
j'espere que ce n'est pas trop compliqué à mettre en place, il faudrait que la correction soit faire sous 2 jours max :$
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 ;) )
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 ;) )
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 ;)
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 ;)
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 898
17 sept. 2007 à 14:29
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.
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.
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 898
17 sept. 2007 à 14:32
17 sept. 2007 à 14:32
Tiens le voilà ;-))
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 898
17 sept. 2007 à 14:42
17 sept. 2007 à 14:42
Normalement oui ;-))
dubcek
Messages postés
18779
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
13 avril 2025
5 630
17 sept. 2007 à 15:32
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) &
cmd1 > fichier ; cmd2 < fichier
et pour en lancer plusieurs:
(cmd1 > fichier ; cmd2 < fichier) &
(cmd1> fichier2 ; cmd3 < fichier2) &