4

why does there is limitation that with pipe() only parent and child process can communicate, why not unrelated processes? why can't two children of a process can't communicate using pipe()?

4

2 回答 2

4

确实有限制。

管道用于fd读/写数据,fd是每个进程的,一个进程维护一张fd表,子进程fdfork时继承该表,每个继承fd的引用与open file父进程相同,由内核维护。


通过同一管道进行通信的进程应该是相关的。

这意味着,这两个进程都应该知道fd管道的 2。


<TLPI>说:

fork()在导致进程存在的一系列调用之前,应该由一个共同的祖先创建管道。

于 2015-12-15T06:33:15.633 回答
2

没有这样的限制。任何两个具有获取对管道每一端的引用的方法的进程都可以通信。一个进程甚至可以使用管道与自己通信。

任何进程都可以使用以下任何一种在进程之间通信文件描述符的通用方法来获取对管道末端之一的引用。管道在这方面并不特殊。

  • 进程本身调用pipe()并获取了两端的文件描述符。
  • SCM_RIGHTS进程通过套接字接收文件描述符作为辅助数据。
  • /proc/<pid>/fd该进程使用特定于平台的方式(例如在 Linux 上)从另一个任意进程获取文件描述符。
  • (可能还有其他方法。)
  • 该进程从使用上述方法之一获得它的祖先(直接或间接)继承文件描述符。
于 2013-04-26T19:12:00.397 回答