这里的简单脚本:
a)不断从套接字读取并将值存储在关联数组中 b)不断从stdin中读取值并在关联数组中已存在时响应t / f
a& b是随机事件,不以任何方式关联。
诀窍是从两个子进程访问数组(因为在后台放置一个进程会将其作为子进程生成)
我正在考虑采用最佳策略,并且会出现一些想法,但我想知道是否有人有更好的想法:
1)将输入从套接字重定向到stdin作为子进程并在一个while循环中处理两个输入(数据大小很小,<30个字符,所以我猜它们将保持原子状态?) 。
2)读取套接字,然后在读取时使用小(0.1?)超时值读取STDIN,以模仿非阻塞I / O.
3)更新:将套接字数据写入文件(实际上让其他进程将其直接写入文件),然后每次请求进入以检查该值是否存在时,处理条目该文件,将它们添加到数组中(使用文件锁定)。
答案 0 :(得分:4)
Bash不是正确的工具。此问题通常使用select(2)
或poll(2)
系统调用来解决,这使您可以在不旋转的情况下同时等待多个文件描述符。 Bash没有任何一个接口。
我建议使用Python或Perl等脚本语言(无论你真正喜欢什么),它提供了select
或poll
的接口(例如Python的select
模块)。
答案 1 :(得分:3)
在所描述的上下文中不知道这是否完全实用且足够原子,但是使用客户端/服务器模型和命名管道,可以创建一个可以区分来自fifo或{{的行的while循环。 1}}。
服务器不断从套接字(stdin
)以及来自/tmp/to
的行(通过stdin
重定向到服务器)读取行。
但是,来自/tmp/to
的行被stdin
字节(del
)标记为该行的第一个字节。
然后(后台)客户端while循环使用这个第一个字节的行来区分不同来源的行。
\177