QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 783|回复: 2

为何只执行子进程,不执行父进程,请教

[复制链接]
发表于 2004-12-30 19:57:41 | 显示全部楼层 |阅读模式
最简单的fork()例子

if((pid=fork())<0) error

else if(pid>0) parent code

else child code
怎么每次都是子进程代码部分执行两遍,父进程代码部分不执行?我在子进程代码里加了exit,外面用了wait都不行,我在子进程里加了打印父子进程的id,看两次打印出来的id,一次像是父进程运行下的,另一次的child id像是子进程,parent id=1,不是父进程的,这是怎么回事??谢谢!
 楼主| 发表于 2004-12-31 09:26:39 | 显示全部楼层

我在pid=fork()外面加个括号(pid=fork())

这样执行就正常了,什么毛病啊?如果我不用wait,父进程id就是1,为什么?
回复

使用道具 举报

发表于 2004-12-31 11:16:18 | 显示全部楼层
<unix环境高级编程>
fork后子进程和父进程是同时的,fork是返回两个值的,对父进程而言,看到的是子进程id,对子进程则是自身的id为0。
如果不用wait,子进程的父进程结束,子进程自动被init接管,init成为父进程,id为1。
int child_pid = fork();
if(child_pid == 0) {
            execlp("sh", "sh", path, (char*)0);
}else {
            int status;
            while(wait(&status) != child_pid);
}
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-6 19:33 , Processed in 0.070049 second(s), 16 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表