免费注册 查看新帖 |

Chinaunix

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

fork后,进程执行顺序的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-12-01 17:59 |只看该作者 |倒序浏览
  1. #include "ourhdr.h"

  2. int glob = 6;
  3. char buf[] = "a waite to stdout\n";
  4. int main()
  5. {
  6.     int var;
  7.     pid_t pid;

  8.     var = 88;

  9.     if(write(STDOUT_FILENO,buf,sizeof(buf)-1) != sizeof(buf)-1)
  10.     {
  11.         return 1;
  12.     }
  13.     printf("before fork\n");

  14.     if((pid = fork()) < 0)
  15.     {
  16.         return 1;
  17.     }
  18.     else if(pid == 0)
  19.     {
  20.         glob++;
  21.         var++;
  22.     }
  23.     else
  24.     {
  25.       sleep(2);
  26.     }

  27.     printf("pid=%d,glob=%d,var=%d\n",getpid(),glob,var);
  28.     exit(0);
  29. }
复制代码
执行结果:
a waite to stdout
before fork
pid=4974,glob=7,var=89  (子进程打印)
pid=4973,glob=6,var=88  (父进程打印)

因为sleep的原因,所以确定先进行子进程的打印,并且从结果来看,肯定是父进程先执行了,因为父进程的打印结果中,变量没有+1。
是不是在子进程先执行的情况下,父进程的打印结果会和子进程一样?也就是说父进程会打印变量+1后的值?

不知道我理解的对不对。有些迷惑,多谢指教。

论坛徽章:
0
2 [报告]
发表于 2011-12-01 18:24 |只看该作者
明白了,子进程和父进程都执行在fork函数调用之后的代码,子进程是父进程的一个拷贝。例如,父进程的数据空间、堆栈空间都会给子进程一个拷贝,而不是共享这些内存。
是拷贝,不是共享。汗一个。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP