侧边栏壁纸
博主头像
林凡晨博主等级

行动起来,活在当下

  • 累计撰写 7 篇文章
  • 累计创建 1 个标签
  • 累计收到 1 条评论

目 录CONTENT

文章目录

shell多线程运行程序

Administrator
2021-12-29 / 0 评论 / 0 点赞 / 322 阅读 / 1716 字
#!/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秒。

注意:可能存在数据不是按照顺序出现的,比如上面是正常的 也可能先出现 2 3 1 5 4乱的顺序,是因为线程之间会抢占资源主要是执行命令使用,顺序暂时不考虑。
0

评论区