用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)
今天看到个不错的shell多进程并发脚本的讲解,现共享给大家:
view source
(责任编辑:IT) |