免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2961 | 回复: 3
打印 上一主题 下一主题

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

论坛徽章:
0
跳转到指定楼层
1 [收藏(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
2 [报告]
发表于 2010-04-28 12:39 |只看该作者
fork()之后父子进程的执行顺序是不确定的!当父进程输出完 b 后,可能父进程就执行 return 0;父进程退出!其它进程都成为init()程序的子进程!此时 shell 进程、和原来创建的子进程是并发执行的!所以可能会出现shell提示符!再输出ac!

论坛徽章:
0
3 [报告]
发表于 2010-04-28 21:45 |只看该作者
回复 2# zd零


    Thank you!! 我懂了。。

论坛徽章:
0
4 [报告]
发表于 2010-05-23 14:19 |只看该作者
fork()之后父子进程的执行顺序是不确定的!当父进程输出完 b 后,可能父进程就执行 return 0;父进程退出!其 ...
zd零 发表于 2010-04-28 12:39

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

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP