日期:2014-05-16  浏览次数:20730 次

关于fork 的一点疑问...
请问全局的静态变量是否在父子进程中共用一份..
我写了一段这样的程序主体是这样的
static int num=10;
int main()
{
pid _t pid;
pid=vfork();
switch(pid)
{
case -1:
  exit(EXIT_FAILURE);
  break;
case 0:
  num=20;
break;
default:
  printf("%d\n",num);
break;
}
}
这样输出的是20
但是不用vfork 的话 用wait 等带子进程运行,输出的就是10 呢 请大侠解释下 还是我wait 错了
static int num=10;
int main()
{
pid _t pid;
pid=vfork();
int staus;
switch(pid)
{
case -1:
  exit(EXIT_FAILURE);
  break;
case 0:
  num=20;
break;
default:
wait(&staus)
  printf("%d\n",num);
break;
}
}

请大侠指点....



------解决方案--------------------
全局的静态变量 也应该是父子进程各一份的,相互独立!
------解决方案--------------------
测试下不就知道喽

------解决方案--------------------
fork()出来的子进程是父进程的一个拷贝;全局变量是属于地址空间的数据段,当然也会被拷贝到子进程的地址空间里面。
vfork()和 fork()有几点不一样: 1: vfork()出来的子进程直接在父进程地址空间里运行,没有拷贝的动作 2. vfork()出来的子进程先运行(父进程被挂起)。fork()出来的子进程则不一定,可能在父进程前或者后。