Génération de plusieurs process depuis une boucle for
14 réponses
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
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.
faly wrote in message <V_KdnRAMu4NTYevVRVn_vwA@giganews.com>:
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?
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 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 ?
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 ?
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 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.
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.
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
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.
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.
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
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
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.
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
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.
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.
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
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
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.
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
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.
Olivier Miakinen wrote in message <48773eef$1@neottia.net>:
Il n'y aurait pas par hasard un caractère « & » dans /tmp/liste_fichiers ?