为什么该程序打印“分叉!” 4次?
#include <stdio.h> #include <unistd.h> int main(void) { fork() && (fork() || fork()); printf("forked!\n"); return 0; }
第fork()一个在调用过程中返回一个非零值(称为p0),在子进程中返回0(称为p1)。
fork()
在p1中,发生短路,&&然后过程调用printf并终止。在p0中,过程必须评估表达式的其余部分。然后fork()再次调用,从而创建一个新的子进程(p2)。
&&
printf
在p0中,fork()返回一个非零值,并进行短路||,因此该过程调用printf并终止。
||
在p2中,fork()返回0,所以||的其余部分 必须评估,这是最后一个fork();导致为p2创建一个孩子(称为p3)。
然后printf,P2执行并终止。
然后printf,P3执行并终止。
printf然后执行4 s。