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

浙公网安备 33010602011771号