我有一个类似这样的脚本:
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程序,但我很想将其作为一种中间解决方案使其工作。
谢谢!
( )
括号)。这是一个有趣的问题,但超出了我的经验范围,也很难测试(现在谁还有串口!?;-)。祝好运。 - shelltervi
的一个打开会话在哪里创建它的工作文件,某些机器上可能是/var/tmp)。大约在同一时间,我的一个同事试图将一个100MB的文件塞入Windows管道,而我从同一项目的测试中知道,Windows NT肯定有限制(大约64K)。因此,不同的操作系统和版本(以及权限和配置)可能会影响这个问题。最好的方法是设置一些测试并观察发生了什么。祝你好运。 - shellter