Prayer

在一般中寻求卓越
posts - 1256, comments - 190, trackbacks - 0, articles - 0
  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

fork() 共享

Posted on 2009-04-15 23:10 Prayer 阅读(329) 评论(0)  编辑 收藏 引用 所属分类: LINUX/UNIX/AIX
pid_t pid;
int stat_loc;
/*父进程*/
if ((pid=fork())>0) {
waitpid(pid,&stat_loc,0);
/*父进程等待进程号为pid的子进程的返回*/
}
else {
/*子进程的处理过程*/
exit(1);
}
/*父进程*/
printf("stat_loc is [%d]\n",stat_loc);

子进程fork返回0。理由:随时可以调用getpid()知道自己的pid是多少,所以没必要fork返回pid

QUOTE:
原帖由 dida_327 于 2005-12-14 15:46 发表
pid_t pid;
int stat_loc;
/*父进程*/
if ((pid=fork())>0) {
waitpid(pid,&stat_loc,0);
/*父进程等待进程号为pid的子进程的返回*/
}
else {
/*子进程的处理过程*/
exit(1);
}
/*父 ...

你这段程序有问题吧,其实fork很简单,
1、返回两次,向父进程返回PID,向自己返回0;
2、子进程拷贝交进程数据段、堆区、栈区;(不过大多采用写时复制技术),一般来讲,共享正文段;

所以,一般是这样的:
pid=fork();
if(pid>0)           //父
{
}
else if(pid==0)  //子
{
}
else    //出错
{
}

以下为父子共享的(前提是父/子中没有退出^o^)
所以,剩下的就是同步与互斥的问题了,扯远了。个人觉得《Unix环境高级编程》第8章开始那个例子,又简单又经典!


其实所有的代码父子进程都是共享的,
就连 if ( pid > 0 ) else 也是。

原帖由 思平 于 2005-12-15 15:36 发表
其实所有的代码父子进程都是共享的,
就连 if ( pid > 0 ) else 也是。

正因为是所有共享,才需要这样的判断噻,否则就用不着了……



只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理