当前位置: > shell编程 >

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

时间:2016-06-05 00:16来源:linux.it.net.cn 作者:IT
今天看到个不错的shell多进程并发脚本的讲解,现共享给大家:
 
view source
 
print?
01 #!/bin/bash
02 #author :  peterguo@tencent.com
03 #date   :  2013.05.24
04  
05 #sub process do something
06 function a_sub_process {
07     echo "processing in pid [$$]"
08     sleep 1
09 }
10  
11 #创建一个fifo文件
12 FIFO_FILE=/tmp/$.fifo
13 mkfifo $FIFO_FILE
14  
15 #关联fifo文件和fd6
16 exec 6<>$FIFO_FILE     # 将fd6指向fifo类型
17 rm $FIFO_FILE
18  
19 #最大进程数
20 PROCESS_NUM=4
21  
22 #向fd6中输入$PROCESS_NUM个回车
23 for ((idx=0;idx<$PROCESS_NUM;idx++));
24 do
25     echo
26 done >&6
27  
28 #处理业务,可以使用while
29 for ((idx=0;idx<20;idx++));
30 do
31     read -u6 #read -u6命令执行一次,相当于尝试从fd6中获取一行,如果获取不到,则阻塞
32     #获取到了一行后,fd6就少了一行了,开始处理子进程,子进程放在后台执行
33     {
34       a_sub_process && {
35          echo "sub_process is finished"
36       } || {
37          echo "sub error"
38       }
39       #完成后再补充一个回车到fd6中,释放一个锁
40       echo >&6# 当进程结束以后,再向fd6中加上一个回车符,即补上了read -u6减去的那个
41     } &
42 done
43  
44 #关闭fd6
45 exec 6>&-


(责任编辑:IT)
------分隔线----------------------------
栏目列表
推荐内容