很简单的关于linux进程创建的问题,会的都来看看谢谢~~~~

tianzishuode4 2009-12-09 01:32:56
linux创建进程
进程模拟图如下
O (p1)

(p2) O——O (p3)

O (p4)
\
O (p5)
表示p5是p4的子进程,p4是p2的子进程,p3也是p2的子进程,p2是p1的子进程。
代码我写出来哈:
/*进程模拟图如下
O (p1)

(p2) O——O (p3)

O (p4)
\
O (p5)
*/
#include <stdio.h>
int main(){
int ret;
ret=fork();
if(ret>0){/*p1*/
printf("当前进程pid号为%d\n",getpid());/*p1*/
/*sleep(5);*/
}
else{ /*进入p2*/
ret=fork();
if(ret==0){/*p4*/
printf("当前进程pid号为%d,父进程pid号为%d\n",getpid(),getppid());/*p4*/
ret=fork();
if(ret==0){/*p5*/
printf("当前进程pid号为%d,父进程pid号为%d\n",getpid(),getppid());
}
}
else{ /*in p2*/
ret=fork();
if(ret==0)/*p3*/
printf("当前进程pid号为%d,父进程pid号为%d\n",getpid(),getppid());
else printf("当前进程pid号为%d,父进程pid号为%d\n",getpid(),getppid());
}
}
}

问题是这样的,如果我不注释那个sleep语句,结果完全正确;但是一旦我把sleep给注释了也就是不让它sleep,每次的结果就都是显示P2的父进程pid为1,就是说p2成了孤儿进程然后被init进程托管了,为什么会出现这个问题呢?P1去哪里了?
...全文
133 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
tianzishuode4 2009-12-09
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 deep_pro 的回复:]
去搜 僵尸进程、孤儿进程
一抓一大把

没爹的孩子说给他收尸啊
[/Quote]那其余几个进程的父进程呢?也挂了吗?那是怎么打印出来的~求解释
wazh012 2009-12-09
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 deep_pro 的回复:]
去搜 僵尸进程、孤儿进程
一抓一大把

没爹的孩子说给他收尸啊
[/Quote]
呵呵,有道理
deep_pro 2009-12-09
  • 打赏
  • 举报
回复
p1打印完就挂了啊
deep_pro 2009-12-09
  • 打赏
  • 举报
回复
去搜 僵尸进程、孤儿进程
一抓一大把

没爹的孩子说给他收尸啊

23,120

社区成员

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

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