我正在跟踪此程序并确定创建了多少个进程(假设没有发生错误)。我绘制了一个图形来显示过程。在我的图中,由第一个fork()
创建的第一个过程包含一个1
,并且每个父级都有指向每个子进程的箭头。这看起来是否正确?该程序创建了多少个进程,以及它们由哪些进程创建?
代码:
1: child2 = 0;
2: child1 = fork(); // fork 1
3: if (child1 == 0)
4: {
5: child2 = fork(); // fork 2
6: }
7: fork(); // fork 3
8: if (child2 > 0)
9: {
10: fork(); // fork 4
11: }
图:
0
/|\
/| \
1 3 4
/\ \
/ \ \
2 3 4
/ /
/ /
3 4
/
/
4
理由
- 第2行创建的子
1
首届fork()
命令。 - 第5行的第二
fork()
命令创建子2
仅对1
,由于if(child1 == 0)
,即只有处理具有fork()
返回0至child1
是1
。 - 第7行上的第3个
fork()
命令为0
,1
和2
创建了孩子3
,因为该语句是由每个进程执行的。 - 第10行创建的子
4
的第四fork()
命令除外2
每个过程,因为每个进程具有child2
其副本被送回从fork()
正值,除了2
,这将有一个在child2
0。
您怎么看?我解释了这段代码并正确地绘制了它吗?
UPDATE
正确图为:
0
/\
/ \
1 3
/|\
/| \
2 4 3
/ \
/ \
3 4
谢谢。我现在看到我犯了我的错误。我认为你的解释是正确的。 –