Chinaunix首页 | 论坛 | 博客
  • 博客访问: 569657
  • 博文数量: 70
  • 博客积分: 3736
  • 博客等级: 中校
  • 技术积分: 1728
  • 用 户 组: 普通用户
  • 注册时间: 2008-07-08 09:15
文章分类
文章存档

2014年(1)

2012年(21)

2011年(7)

2010年(28)

2009年(13)

分类: LINUX

2012-01-18 16:53:48

对于vfork,在子进程调用exec或exit之前,它在父进程空间中执行!

  1. #include <stdio.h>
  2. #include <sys/types.h>
  3. #include <unistd.h>
  4. int glob = 6;
  5. int main()
  6. {
  7.     int var;
  8.     pid_t pid;
  9.     var == 88;
  10.     printf("before vfork\n");
  11.     if((pid = vfork()) < 0){
  12.         perror("vfork error\n");
  13.     }else if (pid == 0){
  14.         glob++;
  15.         var++;
  16.         exit(0);
  17.     }
  18.     sleep(1);
  19.     printf("pid=%d, glob=%d, var=%d\n", getpid(), glob, var);
  20.     exit(0);
  21. }
此处,由于子进程在父进程空间中运行且先于父进程运行,如果exit会关闭标准I/O流,那么在父进程中,"pid="这样的字眼不会输出,但是,实际的输出却是:
[root@localhost tast]# ./4test
before vfork
pid=29821, glob=7, var=3722433

看起来exit没有关闭标准I/O流!!!

阅读(1391) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~