attendez que le processus enfant mais d'erreur: "pid n'est pas un enfant de cette coquille"

J'écris un script pour obtenir des données à partir de HDFS parallèle,puis-je attendre de l'enfant ces processus dans une boucle for, mais parfois, il retourne "pid n'est pas un enfant de cette coquille". parfois, il fonctionne bien。C'est tellement perplexe. J'utilise les "emplois -l" pour afficher toutes les emplois exécuter en arrière-plan. Je suis sûr que ces pid du processus fils du processus du shell, et j'utilise "ps aux" pour s'assurer que ces pid n'est pas l'attribuer à d'autres processus. Voici mon script.

PID=()
FILE=()
let serial=0

while read index_tar
do
        echo $index_tar | grep index > /dev/null 2>&1

        if [[ $? -ne 0 ]]
        then
                continue
        fi

        suffix=`printf '%03d' $serial`
        mkdir input/output_$suffix
        $HADOOP_HOME/bin/hadoop fs -cat $index_tar | tar zxf - -C input/output_$suffix \
                && mv input/output_$suffix/index_* input/output_$suffix/index &

        PID[$serial]=$!
        FILE[$serial]=$index_tar

        let serial++

done < file.list

for((i=0;i<$serial;i++))
do
        wait ${PID[$i]}

        if [[ $? -ne 0 ]]
        then
                LOG "get ${FILE[$i]} failed, PID:${PID[$i]}"
                exit -1
        else
                LOG "get ${FILE[$i]} success, PID:${PID[$i]}"
        fi
done
  • Une bonne question, j'obtiens exactement la même erreur. J'ai lancé 96 tâches en arrière-plan et attendu pour eux. 4 de 96 m'a donné le "pid 28991 (ce nombre est le hasard de l'enfant PID par exemple) n'est pas un enfant de cette coquille". Je suppose que la commande d'attente n'est pas infaillible. Je vais faire quelques recherches.
InformationsquelleAutor henshao | 2011-11-08