侦听已删除的 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
测试读取循环进程仍然存在
我创建了这个 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
测试读取循环进程仍然存在