为什么进程总数是2

why is the total number of processes 2

我想弄明白为什么这条语句会产生 2 个进程

if(fork()&&(fork()||fork()))
 printf("Hello");

我了解短路问题,并且我知道如果在没有 if 的情况下执行此语句,我们将总共获得 4 个进程。那么你能解释一下在这样的语句中插入 if 所使用的标准吗?

应该创建了 4 个进程。您可以通过在 if 语句之后放置一个额外的 printf 调用来轻松验证这一点。

printf("Hello") 仅 运行 两次,因为条件仅对其中两个进程为真。

具体来说,根进程产生了两个子进程,第二个子进程又产生了一个:

<parent> : condition is true because the two first fork calls return non-0 : (true && (true || ??))
  <child1> : condition is false because the first fork returns 0: (false && (?? || ??))
  <child2> : condition is true because the first and third fork calls return non-0: (true && (false || true))
    <child3> : condition is false because the second and third fork calls return 0: (true && (false || false))

因为||语句 returns 如果内部的第一个 fork() 解析为真(实际上与 0 不同)则为真。

&& 语句需要知道第一次分叉和第二次分叉。

所以在你的代码中

  if (fork() &&   // this needs to be evaluated so it forks
  (fork() ||  // this needs to be evaluated so it forks
   fork()  // the previous one was true, so this doesn't need to be evaluated
  ) )

所以你最终会完成两个叉子。