我有一个程序,exec
是另一个程序,然后通过stdin/stdout
与该进程通信。我想注入一个小的记录器来捕获通信,(我认为)它是逐行同步的文本,传播双向通信,但也将其记录到文件中。
有没有简单的方法可以做到这一点?我曾尝试使用strace
,但是它只会带来很多噪音,我想捕获整个序列,因此我想在exec
ing发生时启动它。
我曾想过创建一个小程序,该程序位于调用者和被调用者之间,并且在它被exec
处理后,真正的被调用者将从stdin中读取,记录日志,并将其放在被调用者stdin上,然后等待一些东西回到被调用者的标准输出上,记录下来,然后写回给调用者。
听起来很简单,但是由于设置管道连接以及调试此类程序的困难,我对此感到有些害怕。因此,我认为在此努力之前,我想在这里寻求一个更简单的解决方案。
我已经用Google搜索了一下,但是很难提出一个好的查询。大多以this之类的东西结束,它仍然是代码,并且仅捕获单向通信。
好,所以我咬紧牙关,编写了程序...
我们需要三个子进程,两个用于分别监视,传播和记录stdin和stdout,一个用于执行实际目标。
棘手的部分是如何连接管道。我从Ramesh Yerraballi的视频中学到了一些基础知识,使我能够组装这些作品。
[Here's a gist用于在通过管道进行通信的两个进程之间注入管道间谍的实现。