首先是源码:
#include <stdio.h> #include <unistd.h> int main(int argc, char* argv[]) { fork(); fork() && fork() || fork(); fork(); return 0; }
问能生成多少个进程?
答:20个。
现在来分析一下这个函数:
1、第一个fork和最后一个fork都会被执行,这就会产生4个进程。
2、第3-5个fork,根据运算优先级,可以分为以下5种情况(暂时根据顺序将这三个fork命名为A、B、C):
1)、A>0, B>0,这时不会运行C。
2)、A=0, 这时不会运行B, C>0
3)、A=0, 这时不会运行B, C=0
4)、A>0, B=0, C>0
5)、A>0, B=0, C=0
3、5 * 4 = 20
所以会生成20个进程包括自己的main进程。
时间: 2024-11-09 10:06:13