C fork()与else一起使用

C fork()与else一起使用,c,if-statement,process,fork,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将在子级而不是父级上调用。

我对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将在子级而不是父级上调用。我的理解正确吗?如果是,则子级将打印1。那么它会转到else if和else块吗?
任何帮助都将不胜感激

第一个进程将打印1

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


如果由于
,则| |之后的fork子级将使else失败并打印3,而其子项将打印2,因为!0是正确的。

谢谢@xaxxon。如果我理解正确,1是否只由first fork()的父进程而不是子进程打印?如果是,父进程是否会退出并继续流,子进程将从第一个fork()开始,在| |之后计算第二个fork()?第一个fork的子进程在第一个fork上得到一个假返回,因此它将在| |之后计算位,这将导致它再次返回fork。然后,原始子级收到一个非0(true)返回值,导致原始if语句返回true。再次感谢@xaxxon。我明白你的意思。因此,在第二个fork()的这个子级之后,它将继续使用else if(!fork())块。由于这个新的第三个fork()的子级返回0,使else if(!operator)块为true,将打印2,而第二个fork()的原始子级将打印3。请缩进您的代码。