Ah bah j'ai trouvé.
Le problème se trouvait dans la vérification des process encore en vie, j'avais oublié les accolades pour désigner l'élément du tableau.
D'ailleurs j'en profite pour demander si il n'y a pas un moyen plus simple pour vérifier si un processus est en vie que :
if [[ `ps -e | awk '{print $1}' | grep -c ${tpid[$i]}` -eq 0 ]]
Parceque bon... ce test est réalisé 10 fois de suites, et ces 10 tests seront peut-être répétés plusieurs fois. Ça fini par être un peu lourd.
Edit : Je donne mon code entier ça pourrait être utile (parceque je l'ai modifié depuis mon premier post).
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
| #!/bin/sh
while read P; do
libre=-1
# On recommence tant qu'il n'y a pas eut de place libre
while [ $libre -eq -1 ]; do
# On fait le ménage, et on cherche une place libre
for ((i=0; $i<10; i=$(($i+1)))); do
if [[ ${tpid[$i]} -ne 0 && `ps -e | awk '{print $1}' | grep -c ${tpid[$i]}` -eq 0 ]]; then
tpid[$i]=0;
fi
# Si on a une place libre et qu'on en avait pas déjà une, et bah on la note :)
[[ ${tpid[$i]} -eq 0 ]] && [[ $libre -eq -1 ]] && libre=$i
done
# Si on en a pas trouvé de libre, on attend 0.5 secondes
[[ $libre -eq -1 ]] && sleep 0.5
done
(
# Traitement de $P
fi) &
tpid[$libre]=$!
done |
Et une dernière petite question :
C'est quoi la différence entre if [ bla ] et if [[ bla ]] ?
Partager