|
本来是想看看,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);
} |
|