linux shell 命名管道被阻塞
son函数后台从临时管道中读取。从主shell中把father2输出写入管道。可以运行father1从子程序中写入管道。被阻塞,为什么?有办法解决么?#!/bin/bas...
son函数后台从临时管道中读取。
从主shell中把father2输出写入管道。可以运行
father1从子程序中写入管道。被阻塞,为什么?有办法解决么?
#!/bin/bash
pipe=$(mktemp tmp.XXX)
rm -f $pipe
mkfifo $pipe
#从管道文件中读取
function son (){
while read LINE
do
echo from pipe:$LINE
done<$pipe
}
echo current $$
echo start son
son &
echo $!
Pson=$!
function father1(){
while read subLINE
do
echo father1:read $subLINE
if [ "$subLINE" = "exit" ]; then
break
fi
echo father1:write to pipe:
echo "$subLINE" >> "$pipe"
echo father1:write yes
done
}
function father2(){
while read subLINE
do
if [ "$subLINE" = "exit" ]; then
break
fi
echo $subLINE
done
}
echo input \'exit\' to exitout
echo start father2
father2 >>$pipe
echo start father1
echo 为什么father1内的管道写入操作会被阻塞
father1
rm -f $pipe
别看代码老长,其实没啥东西。就3重定向。其他的都是read 后 echo 展开
从主shell中把father2输出写入管道。可以运行
father1从子程序中写入管道。被阻塞,为什么?有办法解决么?
#!/bin/bash
pipe=$(mktemp tmp.XXX)
rm -f $pipe
mkfifo $pipe
#从管道文件中读取
function son (){
while read LINE
do
echo from pipe:$LINE
done<$pipe
}
echo current $$
echo start son
son &
echo $!
Pson=$!
function father1(){
while read subLINE
do
echo father1:read $subLINE
if [ "$subLINE" = "exit" ]; then
break
fi
echo father1:write to pipe:
echo "$subLINE" >> "$pipe"
echo father1:write yes
done
}
function father2(){
while read subLINE
do
if [ "$subLINE" = "exit" ]; then
break
fi
echo $subLINE
done
}
echo input \'exit\' to exitout
echo start father2
father2 >>$pipe
echo start father1
echo 为什么father1内的管道写入操作会被阻塞
father1
rm -f $pipe
别看代码老长,其实没啥东西。就3重定向。其他的都是read 后 echo 展开
1个回答
展开全部
并不像你想像的那样(son一直读取fifo), son 只会读取一次 fifo 文件就结束了。由于father1第二次写的时候没有读取者,所以你的写fifo的函数就会被block。 把son 改成
function son (){
while true
do
read line <$pipe
echo from pipe:$LINE
done
}
即可,当然,你可以考虑在 son 中加上判断结束的条件,比如从fifo中读到特定字符串就退出循环等。这里不再赘述。
function son (){
while true
do
read line <$pipe
echo from pipe:$LINE
done
}
即可,当然,你可以考虑在 son 中加上判断结束的条件,比如从fifo中读到特定字符串就退出循环等。这里不再赘述。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询