首先,我们来回忆一下父进程与子进程,前几节讲了如何创建子进程,像这样的,pid_t id = fork(); 这样我们就创建好了一个子进程,然而fork()函数的返回值是什么呢?这里要记住:子进程返回0,父进程返回子进程的pid,如果创建失败的话就返回-1.由于是父进程创建的子进程,那么子进程就继承自父进程。比如,子进程继承了父进程的数据空间,堆和栈的副本。但是,父子进程是不是就共享同一片地址空间呢?答案是否定的。这就引出了我们前几节讲的虚拟地址的内容。回忆一下:

它们就是父子进程所对应的地址空间,虽然它们的虚拟地址是一样的,但是它们的物理地址却是不一样的。(这幅图的详细介绍见本博客《linux之地址空间》)

父子进程不共享存储空间,只共享代码段。

下面看一个例子:

想一想这个代码运行的结果是什么呢?

很多人看了这个代码之后以为它会输出4条语句,但其实不然。我们来分析一下其中的奥秘吧,嘿嘿。。。

首先,父进程创建子进程,则父子进程各打印一条自己的pid,打印完之后i++;i++;这时父进程又重新创建子进程,上一级的子进程又进入到父进程,从而又创建子进程,这样i=1时相当于父子进程各创建了2个进程,即第二级创建了4个进程,所以进程数= 2+4=6.

结果如下哦:

这个图是不是有点像二叉树呢?那么当i = 10的时候呢?

经过上述的分析推理得知它的结果是这样的:2+2^2+2^3+……+2^10=2046

当i = n时,公式为:2+2^2+2^3+……+2^n = 2*(1-2^n)/(1-2);

linux之父子进程的输出相关推荐

  1. Linux下父子进程的全局变量

    磨砺技术珠矶,践行数据之道,追求卓越价值  回到上一级页面: PostgreSQL杂记页     回到顶级页面:PostgreSQL索引页  [作者 高健@博客园  luckyjackgao@gmai ...

  2. Linux中父子进程、兄弟子进程之间通信方式--匿名管道pipe(适用于有血缘关系的进程)

    文章目录 编程环境: 进程间通信 IPC: 匿名管道(pipe): 父子进程间通信: 兄弟子进程间通信: 管道的读写行为: 读操作: 写操作: 查看管道缓冲区大小: 设置管道的非阻塞属性: 下载地址: ...

  3. Linux C 父子进程 与 有名管道

    1.mkfifo() 函数 创建管道文件的节点 2.open()函数 在内核创建管道空间,库<fcntl.h> read() write() 3.fork() 函数 父子进程,库<s ...

  4. linux父进程和子进程查看,linux查看父子进程

    python多进程代码 test.py #coding=utf-8 import multiprocessing import time def func(msg): print "msg: ...

  5. linux下父子进程共享socket,多进程共享socket(Linux,Win32)

    您可以共享一两个(或多个插座)在Linux进程和甚至是Windows. 在Linux(或POSIX类型的操作系统),用fork()将导致叉孩子有父母的所有的文件描述符的副本. 就算是没有关闭将继续共享 ...

  6. 【Linux 内核】进程管理 ( 进程特殊形式 | 内核线程 | 用户线程 | C 标准库与 Linux 内核中进程相关概念 | Linux 查看进程命令及输出字段解析 )

    文章目录 一.进程特殊形式 ( 内核线程 | 用户线程 ) 二.C 标准库与 Linux 内核中进程相关概念 三.Linux 查看进程命令及输出字段解析 一.进程特殊形式 ( 内核线程 | 用户线程 ...

  7. Linux学习之系统编程篇:ps 和 kill 命令以及父子进程间数据共享模式

    一.ps 和 kill 命令 1.ps 命令 常用方式: ps aux :查看正在运行进程信息(主要查 pid). ps ajx :更加详细(PID. PPID:父进程 id. PGID:进程组 id ...

  8. linux父子进程字写父读无效,linux父子进程

    1)因为nginx的worker进程都是master进程fork出来的,继承了监听句柄. 2)nginx实现了一个锁,work进程竞争,谁获取锁,谁accept连接.######正解!######自己 ...

  9. linux c之通过管道父子进程实现同步通信

    1.父进程向子进程写数据 进程的概念和父进程向子进程写数据,我们之前有一片博客介绍过  http://blog.csdn.net/u011068702/article/details/54914774 ...

最新文章

  1. Swift实现CoreData存储数据
  2. jQuery学习之:Validation表单验证插件
  3. 快速找到message toast弹出的application代码位置
  4. VxWorks基本OS介绍
  5. MATLAB中矩阵与数组的区别,点运算符的运用
  6. 获取占用fd最大的前20个进程
  7. 【Flink】Flink 使用 ParameterTool 进行传参
  8. [专栏精选]Unity中的Git最佳实践
  9. 【LeetCode 327】区间和的个数
  10. python版武侠小说男女侠姓名生成器
  11. 《2020国内WAF产品研究报告》
  12. 数据库原理(上)--收集得空看
  13. 3D~RPG游戏的制作
  14. trackmaker翻译_体育翻译滑雪中英对照翻译
  15. Wifi流程机制分析:WiFi的启动
  16. thinkPHP安装教程
  17. 零基础如何学习C语言?大神亲手总结 17 招,教你玩转C语言!
  18. (一)OSPF协议 及ospf与RIP的比较
  19. 软件着作权转让交税如何缴纳
  20. Slysoft All-in-One 1.9 (21/03/2007)

热门文章

  1. Django之管理权限
  2. 51Nod.1766.树上最远点对(树的直径 RMQ 线段树/ST表)
  3. Linux中vim编辑器的缩进的功能键
  4. 数学图形之Boy surface
  5. (扩展)欧几里德快速幂
  6. dnse 2.0音效厉害还是full sound厉害点呢?谢谢!!
  7. 产品经理的职责(转)
  8. 计算机博士英语复试题目,博士复试自我介绍中英文双语解读
  9. java struts2 excel上传_文件上传方法,使用Struts2,实现Excel文件读取并写入数据库技术...
  10. 0 win10重装partition_教你在安装WIN10系统中所遇到问题处理方法