当前位置: 技术问答>linux和unix
fork函数的问题
来源: 互联网 发布时间:2015-04-11
本文导语: 程序如下 #include #include #include #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)) { ...
程序如下
#include
#include
#include
#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("errorn");
abort();
}
printf("before forkn");
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多个参数啊!
怎么一回事呢?
#include
#include
#include
#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("errorn");
abort();
}
printf("before forkn");
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多个参数啊!
怎么一回事呢?
|
fork之后就有了两个独立的进程:parent和child,两个进程从fork处分道扬镳,parent的fork返回子进程的pid(当然>0),子进程的fork返回0。你看到的结果是两个进程输出的。
|
Linux下的fork是一次调用,两次返回阿,因为多了一个进程么
父子进程都是从fork()返回的,所以才有上边的情况。
父子进程都是从fork()返回的,所以才有上边的情况。