|
Publicité | ||||||||||||||||||||||
|
|
#1 |
|
Membre du Club
![]() Inscription : février 2005 Messages : 168 ![]() |
Bonjour,
Dans un shell ksh et un unix AIX, comment va etre géré une même variable (mais pas avec la même valeur) de deux scripts (similaire au contenu mais différents au nom) executés au même moment par une application ? En fait concretement, j'ai une application qui va scruter des fichiers. Quand ceux-ci vont être dans leur repertoire respectif,l'application va lancer un script shell ksh respectif pour chaque fichier répéré. La seule différence dans les scripts est la valeur de la variable fic. Est ce que l'AIX peut se mélanger les pédales au niveau des variables qui auront le meme nom et qui seront peut être valorisées au même moment ? Merci beaucoup. Apprentioracle |
|
|
00
|
|
|
#2 |
|
Membre confirmé
![]() frans Inscription : novembre 2009 Messages : 189 ![]() |
Les variables sont "privées" et chaque script lancé (même deux instances du même script) disposent de leur propre allocation en mémoire.
|
|
|
00
|
|
|
#3 | |
|
Expert Confirmé Sénior
![]() Frédéric Ingénieur développement logiciels Inscription : février 2006 Messages : 2 936 ![]() |
Citation:
Donc un même script (qui est interprété par le programme /bin/ksh) peut être lancé 200 fois en parallèle, il n'y aura aucun mélange des variables. Au contraire, la grande difficulté des programmeurs est d'arriver à faire passer des valeurs d'un programme à un autre et il existe des mécanismes spécifiques pour ça (ipcs, pipe, socket, fichiers disque) Le seul danger de mélange peut provenir des fichiers temporaires que crée éventuellement le script. Si le programmeur n'est pas vigilant quand au nom de ces fichiers temporaires, il peut y avoir collision (si un script va travailler dans /tmp/toto et qu'on le lance 2 fois en parallèle il y aura deux processus qui travailleront en même temps dans "/tmp/toto" et les datas de l'un se mélangeront avec les datas de l'autre). Pour éviter ce problème, on essaye d'éviter autant que possible les fichiers temporaires, et si on doit y passer par là, on prend alors toujours soin de rajouter "$$" (n° de processus) aux noms des fichiers temporaires qu'on crée. Comme un n° de processus est unique et dure durant toute l'exécution du programme, plus de soucis.
__________________
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche. Tout ce qu'un individu reçoit sans rien faire pour l'obtenir, un autre individu a dû travailler pour le produire sans en tirer profit. Tout Pouvoir ne peut distribuer aux uns que ce qu'il a préalablement confisqué à d'autres car on n'accroît pas les biens en les divisant. Quand la moitié d'un peuple croit qu'il ne sert à rien de faire des efforts car l'autre moitié les fera pour elle, et quand cette dernière moitié se dit qu'il ne sert à rien d'en faire car ils bénéficieront à d'autres, cela s'appelle le déclin et la fin d'une nation. Dr. Adrian Rogers, 1931 |
|
|
|
00
|
|
|
#4 |
|
Membre du Club
![]() Inscription : février 2005 Messages : 168 ![]() |
Merci à vous 2, Fransoo et Sve@r.
Vos réponses me rassurent totalement. |
|
|
00
|
|
|
#5 |
|
Membre confirmé
![]() frans Inscription : novembre 2009 Messages : 189 ![]() |
Une petite idée sans utiliser de processus complexes :
Au lieu d'exécuter les scripts enfants les "sourcer" dans le script principal. Attention : cela demande d'attribuer certains noms de variables spécifiques et uniques (en utilisant un timestamp, par exemple) pour chacun des scripts "sourcés". Je ne l'ai pas expérimenté mais je pense que ça doit être possible. À appronfondir. |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com