[英]How does fork with && and || Operator work?
我想了解这个程序的 Output。 但我不明白。 我读到了 fork 以及它是如何工作的,我试图理解它,但是当我将它与 && 或 || 混合使用时运营商我不明白为什么 Output 是不同的。 有时我得到一个字,有时是 2、3、4...
#include<unistd.h>
#include<stdio.h>
int main (int argc, char *argv[]) {
(fork()&&fork()) || fork();
printf("Test\n");
return 0;
}
知道它是如何工作的吗?
基于 fork 创建成功与否,output 应该有所不同。 如果所有分叉都创建成功,那么 output 中应该会出现 5 次测试。
1- 一个 output 用于主线程。(1)
2-主线程创建两个分叉( firstpart -> (fork() && fork() || secondpart->fork() )因为第一部分评估为真,第二部分不在主线程中执行。所以两个 output 应该在这里看到。(1+2)
3-每两个创建的分叉创建一个新分叉,但第一部分不在子级中执行,但第二部分在每个子级中执行,因此在总共 5 个输出中会看到另外两个输出。(1+2+2)
有助于更好地理解此代码的内容:
1.fork返回值——当你在代码中的任何地方调用fork时,你就创建了一个新进程,新进程也运行与父进程相同的代码。 从 fork 给出的返回值可以知道父进程和子进程的区别。 对于子进程,fork返回值等于0,对于父进程,它是非零的。
2. 短路逻辑评估 -在 C 中执行 boolean 逻辑时,以短路方式运行。
在您的代码片段中,执行第一个 fork() 后,子进程跳过第二个 fork(由于 && 短路)并转到第三个 fork()。 导致“Test”打印了 2 次。 然后原始父进程遇到第二个 fork(),新的子进程继续执行第三个 fork() 并再次打印 Test 2 次。 父级跳过第三个 fork(),至于它,第一个和第二个 fork 都是非零(|| 的短路)并打印一次“Test”。
因此,“测试”总共打印了 5 次。
P1 (fork-1)
/ \
P2(fork-2) P1 (fork-2)
/ \ / \
P3 P2 P4(fork-3) P1
/ \
P4 P5
第一:对不起这个问题。 我没有做足够的研究,并且我没有将每个叉子视为子项和父项。
我学到的是:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.