fork函数的问题

MarsZhangLing 2003-08-25 02:12:18
程序如下
#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多个参数啊!
怎么一回事呢?


...全文
67 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
lleeoo 2003-08-28
  • 打赏
  • 举报
回复
没错
MarsZhangLing 2003-08-27
  • 打赏
  • 举报
回复
换句话说在GDB调试的时候,只是调试父进程罗????
CoolQ 2003-08-26
  • 打赏
  • 举报
回复
Linux下的fork是一次调用,两次返回阿,因为多了一个进程么
父子进程都是从fork()返回的,所以才有上边的情况。
fierygnu 2003-08-26
  • 打赏
  • 举报
回复
fork之后就有了两个独立的进程:parent和child,两个进程从fork处分道扬镳,parent的fork返回子进程的pid(当然>0),子进程的fork返回0。你看到的结果是两个进程输出的。
mynetpc 2003-08-25
  • 打赏
  • 举报
回复
-----child
parent----|
----- parent

23,116

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧