一个有并发控制(并发池)的脚本

#!/bin/bash
tmp_fifofile="/tmp/$$.fifo"
mkfifo "$tmp_fifofile"
exec 6<>"$tmp_fifofile"
for ((i=1;i<=10;i++));do
                 echo                                                                                  
done >&6
for i in `seq 1 100`;do
       read -u6
      { echo $i   >> /tmp/amos.log ; sleep 3 ; echo >&6; } &
done
wait
exec 6>&-
exit 0

注释:

$$:当前进程的pid

1、创建管道文件$tmp_fifofile

2、将文件描述符6指向管道文件

3、for循环创建连接池,连接池大小为10

4、并发执行,sleep控制并发,一次并发10个。

exec 6<>"$tmp_fifofile":将文件描述符指向管道文件,这里之所以要创建管道文件,是因为必须用文件描述符指向管道文件,才能用read命令读取文件描述符。read一次读一行,而如果用while read line  读文件,会一次读去所有的行,输出的结果也不会是我们想要的。

exec 6>&- 关键文件描述符


你可能感兴趣的:(一个有并发控制(并发池)的脚本)