linux fifo 并发量控制

用fifo控制并发数量,一次同时后台运行两个。运行时间比较长,其中一个运行完之后,又启动了两个进程,这样就同时有3个了,

#!bin/bash
#exec clear file
mkdir -p xxx
thread_num=2

[ ! -p tmp ] && mkfifo tmp
exec 9<>tmp

for ((i=0;i<$thread_num;i++)); do
    echo >&9
done
echo "================start sh===================="
for i in  `cat shfiles.txt`;
do
        read -u 9
        {
         
        
                sh $i
                mv $i xxx/
                echo >&9
        } &
done
wait
exec 9>&-
rm tmp
echo "=================done===================="
exit 0

 

这个方法不行,老是莫名的多一个,又多一个,最后用了别的方法