通过pipe()系统调用进行进程间通信。子进程写入管道的一端,父进程读取管道的另一端。
父进程在开始读之前,waitpid()等待子进程完成。如果子节点以非零返回值退出,则表明子节点有错误。所以parent只是关闭管道描述符,不读取,继续前进。
你认为这在成功完成孩子的情况下会有效吗?在读取管道之前,家长有效地收获了孩子?如果是,那么传输中的数据会发生什么?操作系统将负责数据安全到达父端?
父进程打开管道。PDT中的两个指针将指向管道。一个给写作,一个给阅读。
每当使用fork创建子进程时,PDT将被复制。因此,子进程在PDT中将有自己的指针指向PIPE。
一开始,管道是空的,如果父进程试图读取,它将阻塞。并且您永远不会创建子进程。这将导致死锁。
如果你在读之前关闭写端,你不会有死锁,但是子进程将不能写到管道(读上面的原因)。
所以这应该是你的流程:
1. Parent process creates pipe
2. fork()
3. in parent process you close the writing end
4. in child process you close the reading end
5. read/write to pipe.