从多个PIPE(STDOUT)全面收到保证每一行

时间:2010-08-16 00:37:12

标签: bash shell ssh stdout pipe

前几天我问过是否保留了数据完整性(刷新数据) 即使有多个PIPE流入 localhost的STDIN。如果刷新的数据很大,答案是否定的。 Data integrity question when collecting STDOUTs from multiple remote hosts over SSH

但我想保证每一端都刷新每条线路 完全传递给单个STDIN,不会混淆 来自其他管道的数据。有没有办法这样做?怎么办?

(请注意,如果我在本地创建多个STDIN,则可以执行此操作。 但是如果我可以通过a处理线路流更方便 单STDIN。所以我的问题集中在有案例时 只有一个STDIN在localhost中有多个(STDOUT)PIPE进入它。)

1 个答案:

答案 0 :(得分:1)

这可以通过像以太网中使用的拥塞回退系统来完成。

首先,为每个管道分配一个唯一分隔符。此分隔符不能在任何管道的内容中显示为未转义。现在,使用以下伪代码:

  • 检查其他进程'分隔符;虽然存在奇数个其他进程的分隔符,但等等。
  • 写分隔符。
  • 检查另一个进程是否也编写了不匹配的分隔符。如果是这样,退回随机(增加)金额并返回第一步。
  • 写数据。
  • 写分隔符。

这将确保尽管你会有一些垃圾,但每条消息最终都会通过。