zoukankan      html  css  js  c++  java
  • 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发送给父进程.

  • 相关阅读:
    Windows Phone 四、控件模版
    Windows Phone 三、样式和资源
    Windows Phone 一、XAML基础语法
    第三次月考
    第三次月考
    第七章 LED将为我们闪烁:控制发光二极管
    第六章 第一个linux个程序:统计单词个数
    第五章 搭建S36510开发板的测试环境
    Android深度探索读后感 第四章
    Android深度探索读后感 第三章
  • 原文地址:https://www.cnblogs.com/c-slmax/p/5243666.html
Copyright © 2011-2022 走看看