Posted on 2009-04-15 23:10
Prayer 阅读(389)
评论(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
原帖由 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 也是。
正因为是所有共享,才需要这样的判断噻,否则就用不着了……