fork函数的问题
程序如下
#include<sys/types.h>
#include<stdio.h>
#include<unistd.h>
#define STDOUT_FILENO 1
int val1=6;
char *buffer="an output to standard output \n";
int main(void)
{
int val2;
pid_t pid;
if(write(STDOUTj_FILENO,buffer,strlen(buffer))!=strlen(buffer))
{
printf("error\n");
abort();
}
printf("before fork\n");
if((pid=fork(),0)
{
//出错处理。
}
else if(pid==0)
{
val1++;
val2++;
printf("child proc: pid=%d,val1= %d,val2=%d \n",getpid(),val1,val2);
}
else
{
sleep(2);
printf("Parent proc: pid=%d,val1= %d,val2=%d \n",getpid(),val1,val2);
}
return 0;
}
程序执行的结果是这样的
an output to standard outpur
before fork
child proc: pid=2494,val1=7,val2=2
parent proc pid=2493,val1=6,val2=1
我觉的非常奇怪(、刚学LINUX)程序中else if(pid==0)是个判断,就是如果执行了
child proc: pid=2494,val1=7,val2=2
就不应该还有parent proc pid=2493,val1=6,val2=1啊!
两个怎么可能都执行到呢??
用gdb调试了一下。发现只是执行了parent proc pid=2493,val1=6,val2=1
哪为大哥能够解释一下。这个结果是怎么产生的。
产生子进程只用了FORK()???
不象WINDOSWcreateprocess有N多个参数啊!
怎么一回事呢?