#include<stdio.h>
#include<sys/types.h>
#include<unistd.h>
int globvar=5;
int main(){
  pid_t pid;
 int var=1, i;
  printf("fork is diff with vfork\n");
 // pid=fork();
  pid=vfork();
  switch(pid){
  case 0:
    i=3;    
    while(i-->0){
     printf("child process is running\n");
     globvar++;
     var++;
     sleep(1);
    }
    printf("child‘s globvar=%d,var=%d\n",globvar,var);
   break;
  
  default:
    i=5;
    while(i-->0){
     printf("parent process is running\n");
     globvar++;
     var++;
     sleep(1);
    }
    printf("parent‘s globvar=%d,var=%d\n",globvar,var);
    exit(0);
  case -1:
    printf("process creation failed\n");
    exit(0);
}
 return 0;
} 
运行结果为:
fork is diff with vfork
child process is running
child process is running
child process is running
child‘s globvar=8,var=4
parent process is running
parent process is running
parent process is running
parent process is running
parent process is running
parent‘s globvar=13,var=-1216646167
问题来了,为什么var值不是9????
原文:http://my.oschina.net/u/1401580/blog/337137