我有一个看起来像这样的脚本:
while true; do
read -t10 -d$'\n' input_from_serial_device </dev/ttyS0
# do some costly processing on the string
done
问题是它将错过来自串行设备的下一个输入,因为它正在消耗 CPU 周期来执行昂贵的字符串处理。
我想我可以通过使用管道来解决这个问题,原则是 bash 将缓冲两个进程之间的输入:
( while true; do
read -d$'\n' input_from_serial_device </dev/ttyS0
echo $input_from_serial_device
done ) | ( while true; do
read -t10 input_from_first_process
# costly string processing
done )
我首先要检查我是否正确理解了管道,并且这确实会按我的意图缓冲两个进程之间的输入。这个想法正确吗?
其次,如果我在第二个进程中获得了我正在寻找的输入,有没有办法立即杀死这两个进程,而不是从第二个进程退出并在退出第一个进程之前等待下一个输入?
最后,我意识到 bash 并不是做到这一点的最佳方式,而且我目前正在开发一个 C 程序,但我很想把它作为一个中间解决方案。
谢谢!