6

在linux中是否有可能以某种方式读取另一个进程的输出(来自stdout和stderr)而不知道它?所以假设我有一个进程 A 在后台运行,而进程 B 想要读取它的输出 - 有可能吗?我不能使用管道或屏幕程序。我尝试从 /proc/xxx/fd 或 /pts/x 控制台等读取,但到目前为止没有任何效果。

4

3 回答 3

1

我读到您的问题暗示您不打算编写内核代码,并且这个想法不是修改您正在监视的可执行文件。

鉴于这些限制,答案很简单。你不能。该过程调用 write(1 或 write(2),它们可以去任何地方,并且系统中没有内置“窃听”规定来帮助您查看途中的流量。

于 2010-07-02T02:38:00.527 回答
1

在内核中,我猜你可以编写一个驱动程序来挂钩读取和写入以获得你想要的东西。

在用户空间中,您可以编译一个修改过的 glibc,它将 stdout 和 stderr 输出连同进程和线程 ID 一起记录到某个文件中。但是,如果您破坏某些东西,那将是有风险的。(假设您要跟踪的应用程序没有静态链接或直接对内核进行系统调用)

于 2010-06-30T11:51:55.877 回答
-1

通过简单地使用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*/

  }
于 2010-06-30T13:21:32.580 回答