问题描述
程序创建了多少个进程,包括 初始父进程?还有“你好”会被打印多少次?
我认为,因为它有 4 个 fork 16 个进程(使用 2^n),并且父进程添加到 16 个进程 = 17。 (不确定)
这是我的代码如下:
#include <stdio.h>
#include <unistd.h>
#include <sys/wait.h>
int main(){
int i;
for(i=0; i<3; i++){
if(fork());
printf("Hello %d\n",getpid());
}
return 0;
}
解决方法
我运行了它,它打印了 14 次“Hello”。
我认为解决这个问题的最好方法是倒退。
当 i = 2
(循环的最后一次迭代)时,将打印出两个“Hello”——一个是父级,一个是子级。
当i = 1
时,父母和孩子都会打印“Hello”一次,然后他们每个人都会继续下一次迭代,其中i = 2
(在这种情况下我们看到有是 2 个印刷品)。所以,我们总共有 2+2+2=6 个“Hello”的打印。
当i = 0
时,父母和孩子都会打印“Hello”一次,然后他们每个人都会继续下一次迭代,其中i = 1
(在这种情况下我们看到有是 6 个印刷品)。因此,我们总共有 2+6+6=14 次打印“Hello”。
这可能可以通过一些公式概括(并通过归纳证明)。