c - fork() 与 else

标签 c if-statement process fork

我对 fork() 过程有以下疑问: 说我有一个代码:

if(fork()||fork())
printf("1");
else if(!fork())
printf("2");
else
printf("3");

其中,将打印 1,2 或 3。 我知道 fork() 对于父进程返回非零,对于子进程返回 0。因此,当它到达第一个语句时,第一个 fork() 调用将为父进程返回 1,为子进程返回 0。因为有||运算符,第二个 fork() 仅当第一个操作数返回 0 时才会运行。因此第二个 fork 将在子级上调用,而不是在父级上调用。我的理解正确吗?如果是,则 child 将打印 1。那么它会转到else if和else block 吗? 任何帮助将不胜感激!

最佳答案

第一个进程将打印 1。

原始进程的子进程将在 || 的后半部分返回 true 时打印 1。

|| 之后的 fork 子项由于 ! 会导致 else-if 失败并打印 3,而其子级将打印 2,因为 !0 为 true。

关于c - fork() 与 else,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35402737/

相关文章:

c++ - 我是否需要针对不同的指令集制作多个可执行文件?

c - 当我注释掉 printf 语句时,为什么会出现段错误

c - microblaze 中的 printf 用于十六进制到 char

c - 开头 C : Behavior Printing Strings

python - 嵌套单行循环

python - 迭代循环以更改条件语句,python

javascript - 如何为表单 Javascript 中的选择分配数值

java - 子进程继承了什么?

xcode - cocoa 应用程序 : How to find running process

windows - 进程中的线程数是什么意思(wmic)