为什么有限制,管道()只有父和子进程可以通信,为什么不相关的进程? 为什么一个进程的两个子进程无法使用pipe()进行通信?
答案 0 :(得分:2)
没有这样的限制。任何两个具有获取对管道每端的引用的方法的过程都可以进行通信。流程甚至可以使用管道与自身通信。
任何进程都可以使用以下任何一种在进程之间传递文件描述符的通用方法来获取对管道之一的引用。管道在这方面并不特别。
pipe()
并获取两端的文件描述符。SCM_RIGHTS
辅助数据接收。/proc/<pid>/fd
等特定于平台的方法从另一个任意进程获取文件描述符。答案 1 :(得分:2)
确实存在限制。
管道使用fd
来读取/写入数据,fd
是每个进程,一个进程维护一个fd
表,子进程在fork时继承fd
表,并且每个继承的fd
引用与父进程相同的open file
,由内核维护。
通过同一管道进行通信的进程应该是相关的。
这意味着,2个进程应该都知道管道的2 fd
。
<TLPI>
说:
管道应该在导致存在进程的一系列
fork()
调用之前由共同的祖先创建。