Linux:我可以在不使用任何IPC(管道等)的情况下读取另一个进程的输出吗?

时间:2010-06-30 11:26:36

标签: linux process tty

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

3 个答案:

答案 0 :(得分:1)

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

在用户空间中,你可以编译一个修改过的glibc,它会注销stdout&例如,stderr输出到某个文件以及进程和线程ID。但如果你打破了某些东西,那就有风险了。 (假设您要跟踪的应用程序没有静态链接或直接向内核发送系统调用)

答案 1 :(得分:1)

我读到了你的问题的含义,你不打算编写内核代码,并且想法不是修改你正在监视的可执行文件。

鉴于这些限制,答案很简单。你不能。这个过程调用write(1或write(2,那些可以去任何地方,并且系统中没有内置'窃听'规定来帮助你看到路上的流量。

答案 2 :(得分:-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*/

  }