Answers:
无名管道本质上是具有文件描述符的应用程序专用的管道。没有观察或修改管道流量的原则方法。我也不认为有办法直接在Linux上查看管道。
但是,有一种无原则的方式可以或多或少地执行您要执行的操作:通过ptrace系统调用。您本身并不需要添加到管道上,而是添加到其中一个过程中。为了进行观察,请使用strace,例如
strace -p1234 -s99999 -e write
在哪里1234
是在管道上写入的进程的进程ID。修改数据比较困难,但是可以完成。我认为最简单的方法是首先建立一个中间过程,将其标准输入复制到其标准输出,再加上要注入的数据(减去要抑制的任何数据)。创建两个命名管道,并从一个管道上的stdin和另一个管道上的stdout开始该中间过程。然后使用调试器(例如GDB)使两个目标进程都open
在适当的命名管道上执行,然后dup
将管道放置在适当的文件描述符上。请注意,您有可能使流程中的其中一个流程崩溃。
(很抱歉,如果您不理解最后一段,那么它确实需要一定的技术水平。我认为没有更简单的方法。)
一些对监视管道有用的工具:
对于已经运行但不控制管道的程序,请参见gdb方法:
从正在运行的进程重定向输出。
或者可以使用strace:
strace -ewrite -p $PID 2>&1 | grep "write(1"
仅显示描述符1调用。“ 2>&1”用于将stderr重定向到stdout,因为strace默认情况下写入stderr。