gpt4 book ai didi

c - 在 if/else block 中跟踪具有多个分支的程序

转载 作者:太空宇宙 更新时间:2023-11-04 01:19:01 28 4
gpt4 key购买 nike

我正在尝试跟踪这个程序。我看到它在运行时输出了 4 次,但我不明白为什么。

#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
int main()
{
if (fork() == 0)
fork();
else
{
fork();
fork();
printf("%d\n", getpid());
}
}

据我所知,if/else 会 fork 我的程序,然后如果我们在 child 中,它会再次 fork 。如果我们在父级中,它会运行 else block 中的代码。不过,当我尝试在这一点之后进行追踪时,我会感到困惑。

  • 一旦 else 语句再次 fork ,我们不就在另一个 child 中了吗?

  • child 什么时候停止生成?

最佳答案

经过为我解释后,我现在明白了。

第一个 fork 会产生一个 child (我们称之为 c1):

if (fork() == 0)

当你在子进程中时,fork 的返回值为 0。因此,c1 将执行 if 语句 block :

fork();

这里创建的 child c2(以及 c1)都将死亡,因为它们不会执行 else block 。


同时,父进程会执行else block 。

fork();

这将创建原始父进程 (c3) 的另一个子进程。 c3 将在 else block 中执行下一个 fork。

fork();

现在,我们也将拥有 c4。


与此同时,原始父进程仍然会有一个尚未运行的 fork。这将创建最终的子进程 c5。

运行结束时,会有4个打印:原始父进程、c3、c4、c5。

关于c - 在 if/else block 中跟踪具有多个分支的程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49067324/

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