免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2783 | 回复: 3

Linux fork()调用的详细过程 [复制链接]

论坛徽章:
0
发表于 2010-04-28 11:36 |显示全部楼层

  1. #include<stdio.h>

  2. int main()
  3. {
  4.       int p1,p2;
  5.       if(p1 = fork())
  6.              putchar('b');
  7.       else
  8.          {
  9.             if(p2 = fork())
  10.                  putchar('c');
  11.              else
  12.                  putchar('a');

  13.          }

  14.       return 0;  

  15. }
复制代码
在终端运行会出现b。。$..ca或abc或者其他的。。。小弟一直一知半解。。。下面是我的想法,不知道对不对。。。
首先一般p1都能申请成功,然后fork返回一个正的pid号给父进程,返回0给自己。。然后p2申请成功。。一个父进程和两个子进程并发执行。。
然后我不明白的是它是怎样出现b然后是终端符,然后在出现ac呢??

论坛徽章:
0
发表于 2010-04-28 12:39 |显示全部楼层
fork()之后父子进程的执行顺序是不确定的!当父进程输出完 b 后,可能父进程就执行 return 0;父进程退出!其它进程都成为init()程序的子进程!此时 shell 进程、和原来创建的子进程是并发执行的!所以可能会出现shell提示符!再输出ac!

论坛徽章:
0
发表于 2010-04-28 21:45 |显示全部楼层
回复 2# zd零


    Thank you!! 我懂了。。

论坛徽章:
0
发表于 2010-05-23 14:19 |显示全部楼层
fork()之后父子进程的执行顺序是不确定的!当父进程输出完 b 后,可能父进程就执行 return 0;父进程退出!其 ...
zd零 发表于 2010-04-28 12:39

哦,原来是这样的,懂了。APUE上有讲过相关的知识点,但是理解不深刻。这个例子就深刻好多了!!呵呵……
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

DTCC2020中国数据库技术大会

【架构革新 高效可控】2020年12月21日-23日第十一届中国数据库技术大会将在北京隆重召开。

大会设置2大主会场,20+技术专场,将邀请超百位行业专家,重点围绕数据架构、AI与大数据、传统企业数据库实践和国产开源数据库等内容展开分享和探讨,为广大数据领域从业人士提供一场年度盛会和交流平台。

http://dtcc.it168.com


大会官网>>
  

北京盛拓优讯信息技术有限公司. 版权所有 16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122
中国互联网协会会员  联系我们:huangweiwei@it168.com
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP