我正在启动一个进程,并将其输出重定向到命名管道。我用 with 重新连接到命名管道cat > $pipe
。当进程的标准输出死亡而没有轮询父进程的死亡时,如何将命名管道设置为死亡?
除此之外,还有什么cat
可以用来打开命名管道?
我正在启动一个进程,并将其输出重定向到命名管道。我用 with 重新连接到命名管道cat > $pipe
。当进程的标准输出死亡而没有轮询父进程的死亡时,如何将命名管道设置为死亡?
除此之外,还有什么cat
可以用来打开命名管道?
fifo 始终准备好进行读写,因此程序喜欢cat
并且tail -f
永远不会停止读取。您要检查的是是否有进程写入该文件,如果没有这样的进程,则停止读取。(顺便说一句,读取文件的最佳方法就是read
它。)
lsof
可以告诉您谁从/向指定文件读写。查看其手册页,然后尝试以下操作:
while lsof /path/to/fifo
do
read -r line < /path/to/fifo
printf "%s\n" "$line"
done
我不确定,也没有时间研究 lsof,以找出哪个选项仅输出写入该文件的进程。请在手册页上查看。
因此,只要有一个写入 fifo 的进程,这个脚本就会读取一行并打印出来。一旦没有进程写入文件,循环就会中断并且脚本退出。
除了使用lsof
. 如果有人确实知道更标准的方式,我也想知道。
cat > $pipe
写入管道,而不是从中读取。
如果您想从管道中读取数据并在终端上打印,请尝试tail -f $pipe
.
当新数据写入管道时,该-f
选项会继续运行并打印输出。tail
另请参阅 Linux Journal 中的这篇文章。