#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
int main()
{
fork();
fork() && fork() || fork();
fork();
while(1);
return 0;
}
以上程序生成了多少个进程? 一开始我以为是2的5次方,即32个,后来发现错了,注意 && 运算符和|| 运算符:
1. && 运算的时候, 如果左边的fork返回值为0,那么就不会再调用右边的fork,因为只要1个为false,那么&&运算的结果就为false了。
2. || 运算的时候, 如果左边的fork返回值大于0,那么就不会再调用右边的fork,因为只要1个为true,那么||运算的结果就为true了。
由于这两个条件限制,所以减少了部分fork的执行,最终结果只会生成20个进程,而不是32个进程。