当前位置: 技术问答>linux和unix
关于fork 的一点疑问...
来源: 互联网 发布时间:2017-02-10
本文导语: 请问全局的静态变量是否在父子进程中共用一份.. 我写了一段这样的程序主体是这样的 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: ...
请问全局的静态变量是否在父子进程中共用一份..
我写了一段这样的程序主体是这样的
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("%dn",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("%dn",num);
break;
}
}
请大侠指点....
我写了一段这样的程序主体是这样的
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("%dn",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("%dn",num);
break;
}
}
请大侠指点....
|
fork()出来的子进程是父进程的一个拷贝;全局变量是属于地址空间的数据段,当然也会被拷贝到子进程的地址空间里面。
vfork()和 fork()有几点不一样: 1: vfork()出来的子进程直接在父进程地址空间里运行,没有拷贝的动作 2. vfork()出来的子进程先运行(父进程被挂起)。fork()出来的子进程则不一定,可能在父进程前或者后。
vfork()和 fork()有几点不一样: 1: vfork()出来的子进程直接在父进程地址空间里运行,没有拷贝的动作 2. vfork()出来的子进程先运行(父进程被挂起)。fork()出来的子进程则不一定,可能在父进程前或者后。
|
全局的静态变量 也应该是父子进程各一份的,相互独立!
|
测试下不就知道喽