shell语言实现并发操作

mkfifo创建FIFO特殊文件,是一个命名管道(可以用来做进程之间通信的桥梁)
exec命令:常用来替代当前shell并重新启动一个shell,换句话说,并没有启动子shell。使用这一命令时任何现有环境都将会被清除。
exec在对文件描述符进行操作的时候,也只有在这时,exec不会覆+盖你当前的shell+环境。

# 代码示例


创建一个fifo文件
fifo_file=/tmp/`date +%s`.fifo
mkfifo ${fifo_file}
关联fifo文件和fd6 exec
6<>${fifo_file}
rm -f ${fifo_file}

# 向fd6中输入内容 指定任务并发数
for((i=1;i<=10;i++)); do echo $i done >&6
# 遍历总任务数 for((idx=0;idx<20;idx++)); do read -u6 # 该命令执行一次,相当于尝试从fd6中获取一行,如果获取不到则阻塞 { echo ${idx} sleep 5 echo "${idx} is end"
echo >&6 # 完成后再补充一个回车到fd6中,释放一个锁 } & # 后台执行 done
# wait是用来阻塞当前进程的执行,直至指定的子进程执行结束后,才继续执行。 wait exec 6>&- # 关闭fd6

 参阅博客

https://www.cnblogs.com/klb561/p/10740995.html

https://blog.csdn.net/pcn01/article/details/106590180

posted @ 2021-05-11 20:16  向技术致敬  阅读(240)  评论(0)    收藏  举报