无名管道本质上是具有文件描述符的应用程序私有的。没有原则性的方法来观察或修改管道上的流量。我也不认为有一种方法可以直接在 Linux 上查看管道。
不过,有一种或多或少的无原则方式可以做您想做的事情:通过ptrace系统调用。您不会使用管道本身,而是使用其中一个流程。对于观察,使用strace,例如
strace -p1234 -s99999 -e write
Run Code Online (Sandbox Code Playgroud)
其中1234
是在管道上写入的进程的进程 ID。修改数据比较困难,但可以做到。我认为最简单的方法是首先设置一个中间过程,将其标准输入复制到其标准输出,加上您想要注入的数据(减去您想要抑制的任何数据)。创建两个命名管道并使用一个管道上的 stdin 和另一个管道上的 stdout 启动该中间过程。然后使用调试器(例如GDB)使两个目标进程open
在适当的命名管道上执行,然后dup
将管道放置在适当的文件描述符上。请注意,您可能会在此过程中使其中一个进程崩溃。
(如果你不明白最后一段,对不起,但它确实需要一定的技术水平。我认为没有更简单的方法。)
一些可用于监控管道的工具:
对于无法控制管道的已运行程序,请参阅 gdb 方法:
从正在运行的进程重定向输出。
或者可以使用strace:
strace -ewrite -p $PID 2>&1 | grep "write(1"
Run Code Online (Sandbox Code Playgroud)
仅显示描述符 1 调用。“2>&1”是将stderr重定向到stdout,因为strace默认写入stderr。
归档时间: |
|
查看次数: |
9545 次 |
最近记录: |