#!/bin/bash
function my_cmd(){
sleep 1
}
date
tmp_fifofile="/tmp/$$.fifo"
mkfifo $tmp_fifofile # 新建一个fifo类型的文件
exec 6<>$tmp_fifofile # 将fd6指向fifo类型
rm $tmp_fifofile #删也可以
thread_num=5 # 最大可同时执行线程数量
#根据线程总数量设置令牌个数
for ((i=0;i<${thread_num};i++));do
echo
done >&6
cat /root/shu |while read line;do
read -u6
#一个read -u6命令执行一次,就从fd6减去一个回车符 然后继续向下读取,当fd6没有内容的时候也就停止了。
#可以把具体的需要执行的命令封装成一个函数
{ echo "zheshi:$line"
my_cmd
echo >&6 # 当进程结束以后,再向fd6中加上一个回车符,即补上了read -u6减去的那个
} &
done
wait
exec 6>&- # 关闭fd6
date
echo "over"
读取文件中的内容:
cat /root/shu
1
2
3
4
5
6
7
8
9
10
最后运行的结果:
这个脚本中如果使用原生的shell脚本去执行需要10秒现在只需1秒。
评论区