LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 740|回复: 3

vfork和fork的问题

[复制链接]
发表于 2007-3-21 09:17:23 | 显示全部楼层 |阅读模式
本来是想看看,fork和vfork的区别的,所以写了下面这个程序。本来以为在调用fork时的输出结果是10,20,11,21,父进程PID,30,30;而调用vfork时的结果是10,20,11,21,父进程PID,31,31。可是实际的结果却如下:
调用vfork时:10,20,11,21,父进程PID,0,4,乱码(这里多了一个输出,不知道是那里出来的);
调用fork时:10,20,11,21,父进程PID,1108545272,30,30(还是多了一个输出,但是最终的结果和预期的一样)
情大家指点一下。我的系统是RED HAT9.0;内核是2.4.20-8
程序见下:
# include <unistd.h>
# include <stdio.h>
static int add(int,int)
int main(void)
{
int a=10;
int b=20;
printf("%d\n",add(a,b));
}
static int add(int a,int b)
{
pid_t pid;
printf("%d;%d\n",a,b);
if((pid=vfork())<0)      //if((pid=fork())<0)
printf("error vfork");
else if(pid==0)
{
a++;
b++;
printf("%d;%d;pid=%d\n"a,b,getppid());
}
else{
printf("%d\n",a+b);
return(a+b);
}
发表于 2007-3-21 09:59:34 | 显示全部楼层
vfork执行的指令需要用_exit退出,或者用exec执行一个新进程,不然结果就会不可预知的.
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-3-21 15:01:42 | 显示全部楼层
谢谢 你的回复,不过可能是我 没有说明白。我不是要知道vfork要怎么用,VFORK 在没有后跟exec时,会在父进程的地址空间中执行,这个就是我前面预想的执行结果的原因。我是想知道,产生这样输出的 原因是什么,这里的a,b了两个变量的空间既然被重用,那么为什么还会有4的结果,还有就是多出的那个 多出的输出,应该是父进程的输出,他的输出值,为什么会 那么奇怪。
回复 支持 反对

使用道具 举报

发表于 2007-3-21 17:55:37 | 显示全部楼层
所以才说结果不可预知,你最后得到的结果就是不可预知的结果。没有原因解释。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表