【发布时间】:2015-02-10 04:35:11
【问题描述】:
我正在阅读这本操作系统书籍,他们正在讨论 UNIX 机器中的分叉。我知道fork() 是一个系统调用,它创建了一个进程的副本(一个父母和一个孩子)。假设有以下代码:
1 int main(){
2 pid = fork ();
3 if (pid !=0)
4 fork();
5 fork();
当 PID 为 0 时,我们在子进程中,如果不是,那么我们在父进程中,对吗?所以上面的代码执行如下(在第 2 行时):
P0
/\
P0 P1
由于 P1 不是 0,所以我们执行第 4 行 - 然后我们执行第 5 行,这意味着 P0 被分叉了
P0
/ \
P0 P1
/\ / \
P0 P2 P1 P3
所以创建的进程总数是:P0、P1、P2、P3、4 个进程?这本书说这是六个过程,但没有说明这是如何完成的。
谢谢
更新:这不是作业问题,因为我已经说过结果应该是 6 个过程,我只是不明白这本书是如何得到这个答案的
【问题讨论】:
-
该代码有 3 个分叉行。尝试在绘图中标记行号。
-
@hyde 我在我的画中分叉了 3 次,对吗?
-
好吧,显然不正确,因为当正确结果为 6 时,您的绘图中最终会出现 4 个进程(据我所知,这确实是正确的)
标签: unix fork system-calls