Paralléliser des processus fils dans la limite de n
Bonjour,
Je voudrais faire une sorte de wait qui se declenche sur la fin de n'importe quel process fils ( le wait attend la fin de tous )
pour paralleliser n process et en rajouter un des qu'un des n est fini.
J'ai cherché avec ps, trap et autres mais ce que j'ai trouvé de plus simple a faire est :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
| #!/bin/ksh
#set -xv
F_jeton=$$.tail
echo GO > ${F_jeton}
_test()
# -------------------------------------------------------------------------- #
{
sleep $1
echo "fin $1" >> ${F_jeton}
echo "fin $1"
}
#============================================================================#
for i in 30 5 10 20 5 15 25
do
_test $i &
tail -1f ${F_jeton} |
while read -r a
do
#NB=$(ps --ppid $$ |wc -l)
NB_JOBS=$( jobs -l | wc -l )
echo "V=$i NB=$NB_JOBS"
[[ $NB_JOBS -lt 6 ]] &&
break
done
done
wait |
Mais ici le nombre de job rapporté par jobs est le double de mes appels à _test ...
j'ai donc mis 6 comme limite pour en avoir 3 en // .
Y a t il plus simple ? plus clair ? quelqu'un sait pour quoi j'ai deux jobs par appel à ma fonction ?
MERCI