3 回答
TA贡献2003条经验 获得超2个赞
第fork()一个在调用过程中返回一个非零值(称为p0),在子进程中返回0(称为p1)。
在p1中,发生短路,&&然后过程调用printf并终止。在p0中,过程必须评估表达式的其余部分。然后fork()再次调用,从而创建一个新的子进程(p2)。
在p0中,fork()返回一个非零值,并进行短路||,因此该过程调用printf并终止。
在p2中,fork()返回0,所以||的其余部分 必须评估,这是最后一个fork();导致为p2创建一个孩子(称为p3)。
然后printf,P2执行并终止。
然后printf,P3执行并终止。
printf然后执行4 s。
TA贡献1844条经验 获得超8个赞
对于所有反对者来说,这是一个合并但又不同的问题。怪SO。谢谢。
您可以将问题分解为三行,第一行和最后一行都只是使过程数加倍。
fork() && fork() || fork();
操作员正在短路,所以这是您得到的:
fork()
/ \
0/ \>0
|| fork() && fork()
/\ / \
/ \ 0/ \>0
* * || fork() *
/ \
* *
所以这总共4 * 5 = 20处理每行打印一行。
注意:如果fork()由于某种原因失败(例如,您对进程数有一定限制),它将返回-1,然后您将获得不同的结果。
- 3 回答
- 0 关注
- 630 浏览
添加回答
举报
