免费注册 查看新帖 |

Chinaunix

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

关于fork创建进程的一个问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-05-16 17:23 |只看该作者 |倒序浏览
         fork创建的新的进程是从fork返回的地方开始运行,而不是从开头运行。下面的代码:
  1. #include <stdio.h>
  2. #include <unistd.h>

  3. int main()
  4. {
  5.         int ret_from_fork=111,mypid;
  6.         mypid=getpid();
  7.         printf("Before:my pid is %d\n",mypid);
  8.         ret_from_fork=fork();
  9.         sleep(1);
  10.         printf("After:my pid is %d,fork() said %d\n",getpid(),ret_from_fork);
  11.         return 0;
  12. }
复制代码
执行后
  1. Before:my pid is 5495
  2. After:my pid is 5495,fork() said 5496
  3. After:my pid is 5496,fork() said 0
复制代码
我把ret_from_fork初始化为111。为什么最后一行,fork() said ret_from_fork会是0?这里该如何理解新进程从fork返回的地方开始运行?

论坛徽章:
0
2 [报告]
发表于 2012-05-16 19:27 |只看该作者
fork 返回给父进程的是子进程的进程id号 , 给子进程返回的是0,以此来区分父子进程。

论坛徽章:
0
3 [报告]
发表于 2012-05-16 22:03 |只看该作者
ret_from_fork=fork();  问题在这

论坛徽章:
0
4 [报告]
发表于 2012-05-17 00:32 |只看该作者
fork()后,子进程返回0,而且fork后会从fork处开始运行,所以在子进程中ret_form_fork会是0

论坛徽章:
0
5 [报告]
发表于 2012-05-17 10:58 |只看该作者
谢谢各位,我明白了。

论坛徽章:
0
6 [报告]
发表于 2012-05-17 11:18 |只看该作者
这个fork函数也是Linux里面特殊函数其中一个。很牛逼。。。

论坛徽章:
0
7 [报告]
发表于 2012-05-22 21:34 |只看该作者
ret_from_fork=fork(); 是个复合语句,先fork(),然后再赋值给ret_from_fork,而子进程执行语句的时候是从fork()下一条语句开始执行的。

论坛徽章:
0
8 [报告]
发表于 2012-05-24 01:37 |只看该作者
仔细看一遍fork函数说明就知道了。

回复 1# neilhappy


   

论坛徽章:
0
9 [报告]
发表于 2012-05-26 00:24 |只看该作者
返回父进程和子进程的ID
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP