fork子进程之间传输信息的方法(包含子进程与子进程之间区分的问题的解决)

Posted 指尖上的快乐

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了fork子进程之间传输信息的方法(包含子进程与子进程之间区分的问题的解决)相关的知识,希望对你有一定的参考价值。

今天看到一道题,要求是父进程fork出两个子进程,子进程1需要给子进程2发送一个数据,然后子进程2再将这个数据发送给父进程

具体思想如下.

父进程fork出来的子进程的pid,只有父进程保存下来了,

子进程1可以获取到父进程的pid,子进程2可以获取到子进程1的pid,但是子进程1得不到子进程2的pid,只能通过父进程发送.

因为是先产生子进程1,再产生子进程2

 

fork代码如下 pidChild[2]是全局变量.

for(i = 0; i < 2; i++)

{

  pidChild[i] = pid = fork();

}

执行了之后,在父进程中,pidChild[0],pidChild[1]将分别顺序地保存了子进程1,子进程2的pid

而在子进程1中,因为是先创建下来的,所以pidChild[0]为其pid

子进程2,是后创建下来的,所以继承了子进程1的pidChild[0](这里只是表示子进程2可以访问到子进程1的pid)

而通过父子进程之间"读时共享,写时复制"原则

子进程1与子进程2均继承了父进程变量i

子进程1第一次创建的,所以那时的i值为0,

子进程2第二次创建的,所以i的值为1

这是区分子进程1与子进程2的重要依据

区分代码为 if(0 == pid && i == 0) //子进程1

               if(0 == pid && i == 1)//子进程2

然后通过在fork前设置的信号函数,由父进程发给子进程1子进程2的pid(pidChild[1]),此时子进程1得到了子进程2的pid,

子进程1再发信号给子进程2,最后由子进程2发送给父进程.

以上是关于fork子进程之间传输信息的方法(包含子进程与子进程之间区分的问题的解决)的主要内容,如果未能解决你的问题,请参考以下文章

linux 中的多进程中,父进程与子进程共享的代码段和数据段、堆栈段,是整个程序还是出现在fork()函数后?

linux创建进程fork的方法步骤

fork() 和 wait() 有两个子进程

使用 stdout/stderr 以外的管道与子进程通信

子进程怎么操作父进程中的变量

oracle-1条updata的故事