【发布时间】:2017-09-05 17:09:39
【问题描述】:
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
int main()
{
pid_t pid1, pid2, pid3, pid4;
pid1=fork();
if (pid1!=0) {
pid2=fork();
pid3=fork();
}else {
pid4=fork();
}
return 0;
}
你好, 以下代码执行 4 个分叉。首先,原始进程(我们称之为 P0)执行“pid1=fork()”并创建一个子进程(我们称之为 P1)。然后原始进程再次执行 pid2=fork() 并创建另一个子进程(我们称之为 P2)。然后 P2 和 P0 都执行“pid3=fork()”。因此,P0 创建了第三个孩子(称为 P3),P2 成为父母并创建了一个孩子(称为 P4)。最后,在 else 语句中,第一个孩子(P1)创建了一个孩子(P5)。所以树就像:
P0
P1 P2 P3
P5 P4
我的问题是:我对不对? 提前致谢。
【问题讨论】:
-
使用您的调试器和/或添加一些调试程序
printfs 并自己检查 - 这样您会学到很多东西。 -
不是 pid2=fork();返回两次(父母和孩子),所以 pid3=fork90;将执行两次。
-
@DavidZimmerman 是的,这就是提问者所说的以及为什么他的树形图中的数字上升到 5。
-
应该有两个 P3,一个用于 pid2=fork() 的每一侧