1.5. 父子进程如何通信?

一对父子进程可以通过正常的进程间通信的办法(管道,套接字,消息队列,共 享内存)进行通信,但也可以通过利用它们作为父子进程的相互关系而具有的一 些特殊方法。

一个最显然的方法是父进程可以得到子进程的退出状态。

因为子进程从它的父进程继承文件描述符,所以父进程可以打开一个管道的两端, 然后fork,然后父进程关闭管道这一端,子进程关闭管道另一端。这正是你从你的 进程调用‘popen()’函数运行另一个程序所发生的情况,也就是说你可以向 ‘popen()’返回的文件描述符进行写操作而子进程将其当作自己的标准输入,或 者你可以读取这个文件描述符来看子进程向标准输出写了什么。(‘popen()’函数 的mode参数定义你的意图(译者注:mode=“r”为读,mode=“w”为写);如果你 想读写都做,那么你可以并不困难地用管道自己做到)

而且,子进程继承由父进程用mmap函数映射的匿名共享内存段(或者通过映射特 殊文件‘/dev/zero’);这些共享内存段不能从无关的进程访问。