mkfifo p_file
创建fifo (first in first out) 文件, 文件出来之后可以看见文件类型是p, 管道文件
prw-r–r– 1 tcaplus users 0 9月 7 17:35 p_file
往这个文件里面写的数据, 每次读一行, 只能从头部读出, 读出之后就删除这一行
我们常用的匿名管道 “|” 是一块内存区域. 使用命名管道的话, 这就是一个文件, 他们两个同样都遵循先入先出的规则. 利用命名管道可以并行执行任务
#!/bin/bash
max_curr_num=3 #最大并行执行数目
mission_num=15 #任务总数
mkfifo p_file #创建管道文件
exec 6<>p_file #绑定文件描述符
rm -f p_file #清空管道文件
for ((i=1; i<=$max_curr_num; i++)) #给管道文件写入最大并发数目个换行符
do
echo >&6
done
for ((i=1; i<$mission_num; i++)) #执行任务总数次
do
read -u6 #从文件描述符6读入
{
sleep 1
echo $i
echo >&6 #一个任务完成后, 写入管道文件, 下个任务才能读到并执行
}& #管道文件有多少行, 就并行多少个任务
done
wait #等待所有任务完成
exec 6>&- #释放文件描述符
exit 0
Nproc=20
Pfifo="/tmp/$$.fifo"
mkfifo $Pfifo
exec 6<>$Pfifo
rm -f $Pfifo
for((i=1; i<=$Nproc; i++)); do
echo
done >&6
filenames=`ls *.txh`
for f in $filenames; do
read -u6
{
import_a_txh $f && {
echo "$f done"
} || {
echo "$f error"
}
sleep 1
echo >&6
}&
done
wait
exec 6>&-