#include <stdio.h>
#include <unistd.h>
int main()
{
(fork() && fork()) || (fork() && fork());
printf("Hi...\n");
return 0;
}
答案1
您知道子项fork
返回值0
,父项返回非零值。它变得相当复杂,但您可以勾画出进程如何分叉的树。
or
如果第一个参数是true
,则跳过第二个参数的计算,因为在这种情况下,结果已知为true
。and
如果第一个参数是 ,则跳过第二个参数,false
因为在这种情况下,结果已知为false
。每次fork
调用时,都会存在两个具有不同调用结果的进程实例。因此,在某些子流程中,某些 fork 会被调用,但其他的不会被调用。
草图(黄色表示分叉线已完成,并且执行到下一行)。