#include <unistd.h>
#include <stdio.h>
int main()
{
fork();
fork() && fork() || fork();
fork();
printf("+ \n");
return 0;
}
这段代码一共创建了20个进程,除去main进程就是创建了19个进程
上面代码的输出结果为 20个+号
我们分析一下,第一个fork()和最后一个fork()是一定会执行的,所以这里的关键就在于中间这段代码
fork() && fork() || fork();
如果有一个这样的表达式:A && B || C 这句代码会怎样执行呢?
1、A 为假,那就不判断B 了,接着判断 C
2、A 为真,这又要分为两种情况:
a、B 为真,这就不需要判断 C 了
b、B 为假,那还得判断 C
所以可以得到一下的图
这是我借鉴了别人的图思考得出的思路,不一定对。