如何通过管道注入通信日志

How to inject logging of communication over pipes

我有一个程序 exec 是另一个程序,然后通过 stdin/stdout 与该进程通信。我想注入一个捕获通信的小型记录器,它(我认为)是同步的逐行文本,传播双向通信但也将其记录到文件中。

有什么简单的方法可以做到这一点吗?我试过使用 strace,但它只会产生很多噪音,我宁愿捕捉整个序列,所以我想在 execing 发生时开始它。

我想创建一个位于调用者和被调用者之间的小程序,在它 execed 之后,真正的被调用者从 stdin 读取日志,将其放在被调用者的 stdin 上,然后然后等待被调用者 stdout 返回某些内容,记录下来,然后将其写回给调用者。

听起来很简单,但设置管道连接和调试此类程序的难度让我有点害怕。所以我想在投入精力之前,我在这里要求一个更简单的解决方案。

我用谷歌搜索了一下,但很难制定一个好的查询。大多数情况下以 this 之类的东西结束,它仍然是代码并且只捕获单向通信。

好的,所以我硬着头皮写了程序...

我们需要三个子进程,两个分别监视、传播和记录 stdin 和 stdout,一个执行真正的目标。

棘手的部分是如何连接管道。我从 Ramesh Yerraballi 的视频中学到了一些基础知识,这使我能够 assemble 这些片段。

Here's the repo for 我在通过管道通信的两个进程之间注入管道间谍的实现。