为什么进程总数是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
) )
所以你最终会完成两个叉子。
我想弄明白为什么这条语句会产生 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
) )
所以你最终会完成两个叉子。