Génération de plusieurs process depuis une boucle for

Le
faly
Bonjour,
J'ai lancé le script suivant dpuis une émulationvt par telnet et quamd je l'ai interrompu, autant de process que d'itérations on été créés en parallèle. Avez-vous une explication?
Je m'attendait, malgré le ctrl-c à n'avoir qu'un seule find à la fois et non x find en parallèle

Naturellement, quand j'ai fait un ctrl-c les process fils ont été adoptés par le prox^cess 1.
Merci de vos réponses.

Le script:

for fichier in `cat /tmp/liste_fichiers`
do
find /home/me/rep -name $fichier -exec ls -l {}; >> /tmp/liste_etendu.txt
done
Questions / Réponses high-tech
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 2
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Nicolas George
Le #15299651
faly wrote in message
J'ai lancé le script suivant dpuis une émulationvt par telnet et quamd je l'ai
interrompu, autant de process que d'itérations on été créés en parallèle.
Avez-vous une explication?



Non, ce n'est pas normal.
Olivier Miakinen
Le #15320881
Le 11/07/2008 08:25, faly a écrit :

J'ai lancé le script suivant dpuis une émulationvt par telnet et quamd je l'ai
interrompu, autant de process que d'itérations on été créés en parallèle.
[...]

for fichier in `cat /tmp/liste_fichiers`
do
find /home/me/rep -name $fichier -exec ls -l {}; >> /tmp/liste_etendu.txt
done



Il n'y aurait pas par hasard un caractère « & » dans /tmp/liste_fichiers ?
Olivier Miakinen
Le #15320871
Le 11/07/2008 13:08, j'ai proposé :

J'ai lancé le script suivant dpuis une émulationvt par telnet et quamd je l'ai
interrompu, autant de process que d'itérations on été créés en parallèle.
[...]

for fichier in `cat /tmp/liste_fichiers`
do
find /home/me/rep -name $fichier -exec ls -l {}; >> /tmp/liste_etendu.txt
done



Il n'y aurait pas par hasard un caractère « & » dans /tmp/liste_fichiers ?



Non, c'est idiot, ça n'aurait lané au pire que deux instances, à moins
bien sûr qu'il n'y ait autant de « & » que de lignes.
faly
Le #15329631
Alors non, il n'y a pas de & ni dans le fichier .txt ni à la fin du find!
Il se peu que ce soit un bug du ksh que j'uutilisait (c'est celui qui est implémenté sur les gros serveur AIX...) le ksh93 me semble t-il...
En tous cas merci de vos réponses rapides et pertinentes. Ca comfirme également mes conclusions.

On va contacter big blue.
Stephane CHAZELAS
Le #15336061
2008-07-11, 01:25(-05), faly:
[...]
Je m'attendait, malgré le ctrl-c à n'avoir qu'un seule find à la fois et non x
find en parallèle...



Je ne vois pas non plus, mais il y a quelques bugs la dedans et
je ne l'aurais pas implementé de la sorte.

for fichier in `cat /tmp/liste_fichiers`



Il te faut specifier IFS et disabler le globbing:

IFS='
'
set -f

Ou alors utiliser un boucle while IFS= read -r fichier

do
find /home/me/rep -name $fichier -exec ls -l {}; >> /tmp/liste_etendu.txt



Il manque des quotes autour de $fichier, il manque l'option -d a
ls, il manque une espace entre {} et ; (sans quoi ca ne
marchera pas).

Mais aucune de ces erreurs n'explique le comportement que tu
decris.

done



Pour eviter d'avoir a rescanner le repertoire pour chaque
fichier, tu peux faire:

shift "$#"
while IFS= read -r fichier; do
set -- "$@" -o -name "$fichier"
done < /tmp/liste_fichiers || exit
shift || exit
find /home/me/resp ( "$@" ) -exec ls -ld {} + > /tmp/liste_etendu.txt

Le "+" a la place de ";" evite de lancer un "ls" par fichier.

--
Stéphane
faly
Le #15342291
Merci stéphane pour tes explications.
En fait j'ai juste réécrit le script rapidement sans faire attention à la syntaxe...
Encore merci à tous.
Faly.
faly
Le #15342301
Alors non, il n'y a pas de & ni dans le fichier .txt ni à la fin du find!
Il se peu que ce soit un bug du ksh que j'uutilisait (c'est celui qui est implémenté sur les gros serveur AIX...) le ksh93 me semble t-il...
En tous cas merci de vos réponses rapides et pertinentes. Ca comfirme également mes conclusions.

On va contacter big blue.
faly
Le #15342321
Stéphane, j'ai mis le script ici sans faire attention à la syntaxe mais plus pour info. Ceci dit ta solution m'apprend des choses que je ne connaissais pas. Merci et encore merci à tous le monde.

Faly
Nicolas George
Le #15348781
Olivier Miakinen wrote in message
Il n'y aurait pas par hasard un caractère « & » dans /tmp/liste_fichiers ?



Ça n'aurait aucun effet, heureusement.
Olivier Miakinen
Le #15357081
Le 11/07/2008 16:26, Nicolas George a écrit :

Il n'y aurait pas par hasard un caractère « & » dans /tmp/liste_fichiers ?



Ça n'aurait aucun effet, heureusement.



Oui, bien sûr. Ma remarque était donc doublement idiote.
Publicité
Poster une réponse
Anonyme