命名管道用于并行执行

来源:互联网 发布:中国企业海外投资数据 编辑:程序博客网 时间:2024/06/14 05:28

mkfifo p_file
创建fifo (first in first out) 文件, 文件出来之后可以看见文件类型是p, 管道文件
prw-r–r– 1 tcaplus users 0 9月 7 17:35 p_file
往这个文件里面写的数据, 每次读一行, 只能从头部读出, 读出之后就删除这一行

我们常用的匿名管道 “|” 是一块内存区域. 使用命名管道的话, 这就是一个文件, 他们两个同样都遵循先入先出的规则. 利用命名管道可以并行执行任务

#!/bin/bashmax_curr_num=3 #最大并行执行数目mission_num=15 #任务总数mkfifo p_file  #创建管道文件exec 6<>p_file #绑定文件描述符rm -f p_file   #清空管道文件for ((i=1; i<=$max_curr_num; i++)) #给管道文件写入最大并发数目个换行符do    echo  >&6donefor ((i=1; i<$mission_num; i++))  #执行任务总数次doread -u6  #从文件描述符6读入{    sleep 1    echo $i    echo  >&6  #一个任务完成后, 写入管道文件, 下个任务才能读到并执行}&  #管道文件有多少行, 就并行多少个任务donewait  #等待所有任务完成exec 6>&-  #释放文件描述符exit 0