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子进程之间传输信息的方法(包含子进程与子进程之间区分的问题的解决)的更多相关文章
- python 子进程 subpocess 的使用方法简单介绍
python的子进程嘛,就是利用python打开一个子进程(当然像是一句废话),但是可能和我们理解的不太一样. 一:如何理解? 我们可能的理解:多开一个进程运行某个python函数(如果只想实现这个功 ...
- 解析activity之间数据传递方法的详解
转自:http://www.jb51.net/article/37227.htm 本篇文章是对activity之间数据传递的方法进行了详细的分析介绍,需要的朋友参考下 1 基于消息的通信机制 ...
- CDB与PDB之间的切换方法
Oracle 12c 开始支持 PLUGGABLE DATABASE,并且提供了一个方法在CDB和PDB之间切换. 1. 使用 show pdbs 可以确认当前有哪些PDB? SQL> show ...
- Java中几种常用数据类型之间转换的方法
Java中几种常用的数据类型之间转换方法: 1. short-->int 转换 exp: short shortvar=0; int intvar=0; shortvar= (short) in ...
- fragment Activity之间传值的方法 之------------接口回调
首先 定义一个 回调接口 public interface FragmentCallBack { public void callbackFun1(Bundle arg); public void ...
- php计算两个坐标(经度,纬度)之间距离的方法
本文实例讲述了php计算两个坐标(经度,纬度)之间距离的方法.分享给大家供大家参考.具体如下: 这里使用php计算两个坐标(经度,纬度)之间的距离,返回结果为米或者千米 function distan ...
- 大厂面试题系列:重载(Overload)和重写(Override)的区别。重载的方法能否根据返回类型进行区分
面试题:重载(Overload)和重写(Override)的区别.重载的方法能否根据返回类型进行区分 面试官考察点猜想 这道题纯粹只是考查基础理论知识,对实际开发工作中没有太多的指导意义,毕竟编辑器都 ...
- /编写一个函数,要求从给定的向量A中删除元素值在x到y之间的所有元素(向量要求各个元素之间不能有间断), 函数原型为int del(int A ,int n , int x , int y),其中n为输入向量的维数,返回值为删除元素后的维数
/** * @author:(LiberHome) * @date:Created in 2019/2/28 19:39 * @description: * @version:$ */ /* 编写一个 ...
- VC++ MFC单文档应用程序SDI下调用glGenBuffersARB(1, &pbo)方法编译通过但执行时出错原因分析及解决办法:glewInit()初始化的错误
1.问题症状 在VC++环境下,利用MFC单文档应用程序SDI下开发OpenGL程序,当调用glGenBuffersARB(1, &pbo)方法编译通过但执行时出错,出错代码如下: OpenG ...
随机推荐
- C# IO操作,写入文本到txt文件.
/// <summary> /// 写入日志文件 /// </summary> /// <param name="input"></par ...
- C#远程共享文件路径访问
public class Win32ServiceManager { private string strPath; private ManagementClass ...
- new char[]和new char()的区别
new char[1];分配一块连续的内存,也就是一个数组,里面有1个元素new char(1);分配一块内存,有一个元素,该元素被初始化为1
- NuGet的几个小技巧
因为是转载文章 在此标明出处,以前有文章是转的没标明的请谅解,因为有些已经无法找到出处,或者与其它原因. 如有冒犯请联系本人,或删除,或标明出处. 因为好的文章,以前只想收藏,但连接有时候会失效,所以 ...
- [LeetCode]题解(python):063-Unique path II
题目来源 https://leetcode.com/problems/unique-paths-ii/ Follow up for "Unique Paths": Now cons ...
- TermServDevices错误
来源TermServDevices的错误日志,日志内容 事类型: 错误 事件来源: TermServDevices 描述 打印机 XXXX 所需的驱动程序 XXX 未知.登录之前,请与 ...
- ps、grep和kill联合使用杀掉进程(转)
例如要杀掉hello这个进程,使用下面这个命令就能直接实现. ps -ef |grep hello |awk '{print $2}'|xargs kill -9 这里是输出ps -ef |gre ...
- SLAM学习笔记(2)SLAM算法
SLAM算法分为三类:Kalman滤波.概率滤波.图优化 Kalman滤波方法包括EKF.EIF:概率滤波包括RBPF,FastSLAM是RBPF滤波器最为成功的实例, 也是应用最为广泛的SLAM方法 ...
- django 分页(2) 使用类 页码显示
django 分页显示页码 views.py 显示11页码 ) < 起始位置 - 10总页数 else 总页数 > IF 当前页 小于 起始位置 结束页 IF 当前页 大于 IF 如果结束 ...
- box2dweb基础
简介 大名鼎鼎的物理引擎box2d基本上大家都听说过,网上有两个javascript版本的box2d库,一个时box2djs,已经停止维护,一个是box2dweb.下面就来介绍一下box2dweb的基 ...