#include
int
main(void)
{
pid_t pid;
if ((pid = fork()) < 0) { / /这里是第一个子进程
err_sys("fork error");
} else if (pid == 0) {
if ((pid = fork()) < 0) //创建第二个子进程
err_sys("fork error");
else if (pid > 0)
exit(0); //这里书说上是说终止第一个进程?为什么啊?第一个进程得到的pid不是等于0吗? 还是第二个子进程是第一个子进程创建的啊???不是父进程创建的???
没看明白!!!!!!!谢谢了
sleep(2);
printf("second child, parent pid = %d\n", getppid());
exit(0);
}
if (waitpid(pid, NULL, 0) != pid)
err_sys("waitpid error");
exit(0);
}
于 2012-05-13 23:09:25发表:
输出的结果是1吗
于 2012-05-13 23:09:02发表:
你输出的second child parent id 是1吗??
yezhubenyue 于 2010-09-13 19:37:05发表:
谢谢大家了~~~~~~~~~~~~~~~~~~~~~哈哈
losainen 于 2010-09-11 22:35:52发表:
if ((pid = fork()) < 0) { / /这里是第一个子进程
err_sys("fork error");
}
//上面的是创建第一个子进程不成功的代码, 下面的是创建成功的代码,
else if (pid == 0) { //else if里面才是 PID ==0 这种情况,所以从这里开始往下是子进程的代码
if ((pid = fork()) < 0) //显然这第二个子进程是第一个子进程的创建的 //创建第二个子进程
err_sys("fork error");
else if (pid > 0) //从这里开始,pid大于零说明下面的代码是第一个子进程要执行的
exit(0);
deepwhite 于 2010-09-11 19:22:41发表:
进程 A fork 出了 B;
B 又 fork 出了 C;
在 B fork 出 C 后,终止了 B。
两次 fork ,据说是为了防止僵尸进程 (zombie process)。