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