Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

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

14 réponses
Avatar
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

10 réponses

1 2
Avatar
Nicolas George
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.
Avatar
Olivier Miakinen
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 ?
Avatar
Olivier Miakinen
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.
Avatar
faly
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.
Avatar
Stephane CHAZELAS
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
Avatar
faly
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.
Avatar
faly
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.
Avatar
faly
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
Avatar
Nicolas George
Olivier Miakinen wrote in message <48773eef$:
Il n'y aurait pas par hasard un caractère « & » dans /tmp/liste_fichiers ?



Ça n'aurait aucun effet, heureusement.
Avatar
Olivier Miakinen
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.
1 2