是否有可能在linux中以某种方式读取另一个进程的输出(来自stdout和stderr)而不知道它? 因此,让我们说我有一个进程在后台运行,并且进程B想要读取它的输出 – 有可能吗? 我不能使用pipe道或屏幕程序。 我尝试从/ proc / xxx / fd或从/ pts / x控制台读取等,但没有任何工作到目前为止。
在内核中,我想你可以编写一个驱动程序来挂钩读写操作来获取你想要的内容。
在用户空间中,你可以编译一个修改后的glibc,把stdout&stderr输出一起注销到某个文件,例如进程和线程ID。 但是如果你破坏了某些东西,那就很危险。 (假设你想要跟踪的应用程序没有静态链接,或者直接调用系统内核)
我读了你的问题,你不打算编写内核代码的含义,而且这个想法不是要修改你正在执行的可执行文件。
鉴于这些限制,答案很简单。 你不能。 这个过程调用write(1,或write(2,这些可以去任何地方,而且没有内置在系统中的'窃听'提供,以帮助你看到路上的流量。
通过简单地使用dup2函数:
int b_fd; /* This is the B process File descriptor*/ int a_fd /* This is the A process File descriptor*/ int main (int argc, char*argv[]){ /** I suppose that you can init the file descriptor for A*/ dup2( b_fd, a_fd); /**Now everything that A will output will be written in B file descriptor*/ }