程序创建了多少个进程?

问题描述

程序创建了多少个进程,包括 初始父进程?还有“你好”会被打印多少次?

我认为,因为它有 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”。

这可能可以通过一些公式概括(并通过归纳证明)。