我正在尝试在 Bash 中的两个进程之间实现命名管道通信解决方案。
第一个进程向命名管道写入一些内容:
send(){
echo 'something' > $NAMEDPIPE
}
第二个脚本应该像这样读取命名管道:
while true;do
if read line < $NAMEDPIPE;do
someCommands
fi
done
请注意,之前已使用传统命令创建了命名管道
mkfifo $NAMEDPIPE
我的问题是阅读器脚本并不总是在运行,因此如果编写器脚本尝试写入命名管道,它将一直处于阻塞状态,直到阅读器连接到管道。
我想避免这种行为,解决方案是捕获 SIGPIPE 信号。事实上,根据 man 7,当尝试在没有阅读器的管道中写入时,应该发送信号。所以我改变了我的红色功能:
read(){
trap 'echo "SIGPIPE received"' SIGPIPE
echo 'something' > $NAMEDPIPE
}
但是当我运行阅读器脚本时,脚本会被阻止,并且不会打印“SIGPIPE received”。
我是在信号机制上弄错了,还是有更好的解决方案来解决我的问题?