shell多线程运行程序

#!/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乱的顺序,是因为线程之间会抢占资源主要是执行命令使用,顺序暂时不考虑。

 

posted @ 2021-03-14 14:06  物是人非a  阅读(200)  评论(0)    收藏  举报