#include <stdio.h>
#include <unistd.h>
int main()
{
int test = 0;
int pid = 0;
if(( pid = vfork()) > 0)
{
printf("%d\n",test);
}
else if(pid == 0)
{
test += 10;
}
return 0;
#include <unistd.h>
int main()
{
int test = 0;
int pid = 0;
if(( pid = vfork()) > 0)
{
printf("%d\n",test);
}
else if(pid == 0)
{
test += 10;
exit(0); //改用这个退出
}
return 0;
}
#include <unistd.h>
int main()
{
int test = 0;
int pid = 0;
if(( pid = vfork()) > 0)
{
printf("%d\n",test);
}
else if(pid == 0)
{
test += 10;
}
return 0;
}
若fork结果
[wuliande@bogon 1]$ mytest
0
[wuliande@bogon 1]$
若vfork结果
10560347
10560347
10560347
...............
10560347
10560347
这两个结果反映出 vfork本来就是为了exec(或exit退出)来设计的 如果之后不紧接着调用exec 而做一些别的操作 结果可能是未知的
(不过这次出错 怀疑应该是 return 的错误)
根据apue vfork之后子进程应该运行在父进程空间 所以return出错 因为不可能子进程就这样终止了父进程
#include <unistd.h>
int main()
{
int test = 0;
int pid = 0;
if(( pid = vfork()) > 0)
{
printf("%d\n",test);
}
else if(pid == 0)
{
test += 10;
exit(0); //改用这个退出
}
return 0;
}
结果
[wuliande@bogon 1]$ mytest
10
[wuliande@bogon 1]$
子进程改变了父进程变量的值那么证明了 vfork之后子进程应该运行在父进程空间(但具体运行方式 表示不知)
vfork保证了 子进程先运行