shell脚本实现程序并发执⾏
shell脚本实现程序并发执⾏
循环实现并发程序:
并发的实现原理是将进程放到后台运⾏,从⽽不影响当前shell的运⾏。在shell脚本中有&符号可以实现这个操作。
# !/usr/bin/bash
echo"hello multiprocess"
for((i=0; i<10; i++));
do
{
echo$i
sleep 2s
}&# 在程序后⾯加上&表⽰命令在后台执⾏
done
wait# 等待⼦进程结束
echo"run end"
结果:
hello multiprocess
1
2
3
4
6
7
8
9
5
run end
控制并发的数量:
程序的并发数量并不是⽆限的,进程过多会导致机器卡死,所以需要控制并发的数量。可以使⽤管道来实现控制并发的数量。
# !/usr/bin/bash
process=5  # 指定最多5个进程
tmp_fifofile=/tmp/$$.fifo  # 使⽤当前pid来创建管道⽂件,防⽌名字冲突mkfifo$tmp_fifofile# 创建管道⽂件
exec 9<>$tmp_fifofile# 打开⽂件,并且将⽂件描述符设置为9
rm$tmp_fifofile# 删除刚刚的⽂件,不会影响⽂件描述符
for i in` seq $process `
do
echo>&9  # 向⽂件描述符9中传递5个空⾏
done
for i in{1..10}# 循环遍历
do
read -u 9  # 读取管道内容,每次读取⼀⾏
{
echo$i# 显⽰当前值
sleep 1s  # 使程序延时
echo>&9  # 程序运⾏结束后再向管道⽂件中加⼀个空⾏
}&
done
wait# 等待程序
exec 9>&-  # 释放⽂件描述符
exec 9<&-
echo"run end!"
结果:
1
2
3
4
5
shell最简单脚本6
7
8
9
10
run end!
注:
exec fd<file# 表⽰以只读的⽅式打开⽂件,并关联⽂件描述符fd
exec fd>file# 表⽰以只写的⽅式打开⽂件,并关联⽂件描述符fd
exec fd<>file # 以读写的⽅式打开⽂件,并关联⽂件描述符fd
read -u fd  # 表⽰读取⽂件描述符fd关联⽂件⼀⾏数据
` `# 和$()意思⼀样,表⽰命令替换

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。