gpt4 book ai didi

c - 流程层次结构

转载 作者:行者123 更新时间:2023-11-30 19:05:57 25 4
gpt4 key购买 nike

我有一个关于 fork() 和 exit() 的问题来准备考试。在下面的代码中,生成了多少个进程以及它们的层次结构(父/子)是什么?

int i;
pid_t f;
for(i=0; i<3; i++){
f = fork();
if(f==0) exit(0);
f = fork();
if(f > 0) exit(0);
}

我认为创建的进程总数等于6,但最后的进程总数等于1,剩下的一个是子进程,我对吗?

最佳答案

int i;
pid_t f;
for(i=0; i<3; i++){
f = fork();
if(f==0) exit(0);
f = fork();
if(f > 0) exit(0);
}

我们来画一幅画

P: first parent
i = 0;

+---+
| P |
+---+
| fork() +----+ exits
|---------> | C1 | ----> because of (if==0) exit(0)
| +----+
|
| fork() +----+
|---------> | C2 |
| +----+
| | next loop
| | i = 1, C2 is the only surviving
| | process, it becomes the new parent P
| v
v repeat same graph where P == C2
exits
because of
if(f > 0) exit(0)

每次迭代都会创建 2 个子级,即父级 P和第一个 child C_1退出时,老二C_2幸存下来。下一次迭代执行相同的操作,新的父级是第一次迭代的第二个子项 C_2 ,它还将创建两个新的子项: C_2_1C_2_2C_2C_2_1退出并 C_2_2幸存下来。下一个迭代执行相同的操作,C_2_2创建两个 child :C_2_2_1C_2_2_2C_2_2C_2_2_1退出并 C_2_2_2幸存下来。循环结束:

  • 创建了 6 个子项:C_1 , C_2 , C_2_1 , C_2_2 , C_2_2_1 , C_2_2_2
  • 来自那些 child C_2 , C_2_2创建了新的 child
  • 总共 3 个父进程,1 个祖进程 ( P ) 和两个父进程 ( C_2 , C_2_2 )。

没有注释的图表

+---+
| P | i == 0
+---+
| +-----+
|----> | C_1 | --> exit
| +-----+
|
| +-----+
|----> | C_2 | i == 1, new Parent
| +-----+
v | +-------+
exit |----> | C_2_1 | --> exit
| +-------+
|
| +-------+
|----> | C_2_2 | i == 2, new Parent
| +-------+
| | +---------+
| |------> | C_2_2_1 | --> exit
v | +---------+
exit |
| +---------+
|------> | C_2_2_2 | i == 3, ends loop
| +---------+
|
v
exit

关于c - 流程层次结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48854587/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com