1

我正在启动一个进程,并将其输出重定向到命名管道。我用 with 重新连接到命名管道cat > $pipe。当进程的标准输出死亡而没有轮询父进程的死亡时,如何将命名管道设置为死亡?

除此之外,还有什么cat可以用来打开命名管道?

4

2 回答 2

5

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. 如果有人确实知道更标准的方式,我也想知道。

于 2012-07-02T10:32:27.940 回答
0

cat > $pipe写入管道,而不是从中读取。

如果您想从管道中读取数据并在终端上打印,请尝试tail -f $pipe.

当新数据写入管道时,该-f选项会继续运行并打印输出。tail

另请参阅 Linux Journal 中的这篇文章

于 2012-07-02T10:12:42.170 回答