侦听已删除的 fifo/命名管道的 EOF

Listen for EOF for deleted fifo / named pipe

我创建了这个 fifo/命名管道

my_named_pipe="$HOME/foobar"
mkfifo "$my_named_pipe"

while read line; do on_fifo_msg "$line"; done < ${my_named_pipe} &

稍后,我从文件系统中删除了这个 fifo - 我假设读取循环由于 EOF 或其他原因而结束 - 但我如何监听该事件?我如何监听读取循环何时结束?

我认为 while read 循环没有任何方法可以自动检测 FIFO 被删除。

您可以使用另一个循环来定期检查 FIFO 是否仍然存在,并终止读取循环:

while read line; do on_fifo_msg "$line"; done < ${my_named_pipe} &
read_pid=$!
while kill -0 $read_pid; do
    if ! [[ -e "$my_named_pipe" ]];
    then kill $read_pid
    fi
    sleep 1
done &

kill -0 $read_pid测试读取循环进程仍然存在