用fifo来处理shell下的多进程并发

post by rocdk890 / 2015-9-8 10:42 Tuesday linux技术
 今天看到个不错的shell多进程并发脚本的讲解,现共享给大家:
#!/bin/bash
#author :  peterguo@tencent.com
#date   :  2013.05.24
 
#sub process do something
function a_sub_process { 
    echo "processing in pid [$$]"
    sleep 1
}
 
#创建一个fifo文件
FIFO_FILE=/tmp/$.fifo
mkfifo $FIFO_FILE
 
#关联fifo文件和fd6
exec 6<>$FIFO_FILE      # 将fd6指向fifo类型
rm $FIFO_FILE
 
#最大进程数
PROCESS_NUM=4
 
#向fd6中输入$PROCESS_NUM个回车
for ((idx=0;idx<$PROCESS_NUM;idx++));
do
    echo
done >&6 
 
#处理业务,可以使用while
for ((idx=0;idx<20;idx++));
do
    read -u6  #read -u6命令执行一次,相当于尝试从fd6中获取一行,如果获取不到,则阻塞
    #获取到了一行后,fd6就少了一行了,开始处理子进程,子进程放在后台执行
    {
      a_sub_process && { 
         echo "sub_process is finished"
      } || {
         echo "sub error"
      }
      #完成后再补充一个回车到fd6中,释放一个锁
      echo >&6 # 当进程结束以后,再向fd6中加上一个回车符,即补上了read -u6减去的那个
    } &
done
 
#关闭fd6
exec 6>&- 

ps:http://my.oschina.net/sanpeterguo/blog/133304
夜空- 本站版权
1、本站所有主题由该文章作者发表,该文章作者与夜空享有文章相关版权
2、其他单位或个人使用、转载或引用本文时必须同时征得该文章作者和夜空的同意
3、本帖部分内容转载自其它媒体,但并不代表本站赞同其观点和对其真实性负责
4、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意
5、原文链接:blog.slogra.com/post-609.html

标签: linux shell 并发 fifo 多进程

评论: