fork() 在这里如何工作?

How fork() will work here?

{ 
    if(fork() && fork()) 
    { 
        fork(); 
    } 

    if(fork() || fork()) 
    {
        fork();
    } 

    printf("hello"); 
    return 0; 
} 

我不知道 fork() 在这里会如何表现,以及 hello 会打印多少次。
我只知道 fork() && fork() 将为 1 个父进程生成总共 3 个进程,类似地,fork() || fork() 将为 1 个父进程生成 3 个进程。

在第一个 if 条件之后,创建了 3 个进程,只有父进程会进入 if 块。现在总共有 4 个进程。现在,如何进一步进行,我完全搞砸了?

如果可能,请给出树状图。

第一个区块:

if(fork() && fork()) 
{ 
    fork(); 
}

Child进程收到0,跳过if,parent继续计算条件。 Parent 执行下一个 fork 并进入再次 fork 的 if 块。所以我们有 3 个 fork 调用导致 4 个进程。

然后这4个进程中的每一个都执行下一个块。单看一个:

if(fork() || fork()) 
{
    fork();
} 

我们分叉一次。 child 收到非 0 且条件结果已经为真,因此它进入 if 而不评估条件的第二部分并在那里分叉。所以我们已经有 2 个 fork 调用。 Parent 进程必须计算表达式中的第二个分叉,它 child 进入 if 并再次分叉。所以还有 2 个 fork 调用。总共 4 个调用导致 5 个 运行 个进程。

所以来自第一个块的 4 个进程中的每一个在第二个块中分叉 in-to 5 个进程,导致总共 4*5 = 20 个进程。每个打印 "hello".

树可视化!

if(fork() && fork()) 
{ 
    fork(); 
}

现在系统中有4个进程运行; PC1C2C3.

如果块,每个将执行下一个。

if(fork() || fork()) 
{ 
    fork(); 
}

系统中总共有 4*5 = 20 个进程 运行,每个进程都会打印 "Hello".