Shell-并发执行

Shell-并发处理

并发执行

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
[root@std_centos test]# cat aa.sh
f1()
{
tail -f 1.txt
}
f2()
{
tail -f 2.txt
}
f3()
{
tail -f 3.txt
}
f4()
{
echo "finished"
}
f1 & #f1-f3 并发执行
f2 &
f3 &
wait #wait的作用:等待前面的函数执行完成
f4 #最后执行f4

控制并发进程数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
[root@std_centos test]# cat cc.sh
tempfifo=/tmp/$$.fifo ##获取当前程序的pid,以pid作为文件名,防止重复。
mkfifo $tempfifo ##创建有名管道文件
exec 1000<>$tempfifo ##将文件描述符1000与管道文件关联
rm -rf $tempfifo ##删除管道文件,只保留文件描述符
for ((i=1; i<=3; i++)) ##写入3行(空行)到文件描述符1000
do
echo >&1000
done
for ((j=1;j<=10;j++)) ##队列总共10个
do
read -u1000 ##读取1个空行(读取后,文件描述符减少1个空行,如没空行则hold住等待,知道有新增空行,以达到进程数控制的效果)
{
tail -f $j.txt
echo >&1000 ##写入1个空行(写入后,文件描述符又增加1个空行)
}&
echo "running:"$j
done
wait
exec 1000<&- #关闭文件描述符的读
exec 1000>&-
echo "--finished--"