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 : Sélectionner tout - Visualiser dans une fenêtre à part
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