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
原文:https://www.cnblogs.com/wllit/p/14757114.html