首页 > 技术文章 > shell 多线程

txwsqk 2017-12-06 01:07 原文

不熟悉 io 重定向的童鞋,先学习一下相关知识 http://www.linuxplus.org/kb/io-redirection.html

 

下面是简单代码

#!/bin/bash

tmpfile='fifo'
mkfifo $tmpfile        #创建一个先进先出队列

exec 6<>$tmpfile       #使用文件描述符6关联$tmpfile

for((i=0;i<5;i++));do  #初始化 你想并发几个就循环几次, echo >&6 就是往队列里放5个空值,让后面的 read -u 6 可以一次读取一行
    echo >&6
done

for i in {1..100};do   # 这里只是举例打印100个数,你也可以读取一个大文件
    read -u 6          # 能读出来就继续下面的任务,没有东西可读就挂起在这里,等待后面的 echo >&6 往里再放一个空行
    { echo $i          # 你实际要执行的命令
    sleep 3            # 为了让你看到效果,可删除这条命令
    echo >&6           # 补充一个空行,让 read 可以继续往下运行
    }&                 # 把你的任务放后台才能并发
done

exec 6>&-              # 关闭文件描述符6
rm -f $tmpfile

  

推荐阅读