|
父子进程如何通信?
======================
一对父子进程可以通过正常的进程间通信的办法(管道,套接字,消息队列,共
享内存)进行通信,但也可以通过利用它们作为父子进程的相互关系而具有的一
些特殊方法。
一个最显然的方法是父进程可以得到子进程的退出状态。
因为子进程从它的父进程继承文件描述符,所以父进程可以打开一个管道的两端,
然后fork,然后父进程关闭管道这一端,子进程关闭管道另一端。这正是你从你的
进程调用‘popen()’函数运行另一个程序所发生的情况,也就是说你可以向
‘popen()’返回的文件描述符进行写操作而子进程将其当作自己的标准输入,或
者你可以读取这个文件描述符来看子进程向标准输出写了什么。(‘popen()’函数
的mode参数定义你的意图(译者注:mode=“r”为读,mode=“w”为写);如果你
想读写都做,那么你可以并不困难地用管道自己做到)
而且,子进程继承由父进程用mmap函数映射的匿名共享内存段(或者通过映射特
殊文件‘/dev/zero’);这些共享内存段不能从无关的进程访问。 |
|