为什么该程序打印“分叉!” 4次?
#include <stdio.h>
#include <unistd.h>
int main(void) {
fork() && (fork() || fork());
printf("forked!\n");
return 0;
}
最佳答案
第一个fork()
在调用过程(称为p0)中返回非零值,在子进程(称为p1)中返回0。
在p1中,发生&&
短路,该过程调用printf
并终止。在p0中,过程必须评估表达式的其余部分。然后,它再次调用fork()
,从而创建一个新的子进程(p2)。
在p0中,fork()
返回一个非零值,并且发生||
短路,因此该过程调用printf
并终止。
在p2中,fork()
返回0,所以||的其余部分。必须求值,即最后一个fork()
;导致为p2创建一个孩子(称为p3)。
然后,P2执行printf
并终止。
然后P3执行printf
并终止。
然后执行4个printf
。
关于c - 为什么该程序打印“ fork !” 4次?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32541689/