在这段代码中创建了多少个进程?

Sér*_*mes 2 c fork process

你能帮帮我吗?我对流程的创建有点困惑,我认为创建的流程数量是7,我是对的吗?

int main(){
    pid_t pid;
    int i;
    for (i = 0; i < 3; i++){
        pid = fork();
        if(pid > 0){
            printf("I'm father\n");
        }else{
            sleep(1);
        }
    }

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

Joh*_*ger 5

你是对的,7个进程是分叉的(加上原来的父进程,总共8个进程).关键概念是分叉进程最初(接近)精确地与其父进程重复,因此特别是它们具有相同的变量值,并通过从fork()调用返回来开始执行.此表格列出了程序中将出现的分叉:

  i  proc0  proc1  proc2  proc3  proc4  proc5  proc6  proc7
 -----------------------------------------------------------------
  0    +1    new
  1    +1     +1    new    new
  2    +1     +1     +1     +1    new    new    new    new
Run Code Online (Sandbox Code Playgroud)

+1小号表明叉; 将它们加起来得到7.分叉的进程4-7是在什么时候创建的i == 2,但是它们本身并不是因为它们在它们可以这样做之前掉出了循环的底部(并且它们的父母在它们可以再次分叉之前掉出底部).

还要注意,流程标签proc2- proc7不直接传达有关父母或创建顺序的信息; 该表仅i在分叉时将每个标签与变量值相关联,并描述每个过程分叉的次数与其i开始运行时的值的函数关系.