分享
三行代码  ›  专栏  ›  技术社区  ›  Malithya Fernando

当fork()处于条件中时会发生什么?

  •  -1
  • Malithya Fernando  · 技术社区  · 7 月前

    有人能给我这个代码的输出(带解释)吗? 谢谢您。。。

    #include <stdio.h>
    #include <unistd.h> 
    
    int main() 
    { 
        if (fork() && (!fork())) { 
            if (fork() || fork()) {
                fork(); 
            } 
        } 
        printf("Friend\n");
        return 0; 
    }
    
    1 回复  |  直到 7 月前
        1
  •  1
  •   Sahan Dissanayaka    7 月前

    在进入代码之前,最好理解what is fork()系统调用

    fork()系统调用通过'parent'创建一个新进程,新创建的进程称为'child'进程

    当fork成功时,子进程返回0,父进程返回正整数

    所以从程序计数器开始这两个进程同时工作。。。

    在这里fork()处于if条件下,在猜测输出时也有点棘手

    1. first fork()创建新的C1->0

    2. second fork()创建新的C2->!0->1

    所以第一个条件是由C2(哪个父正整数和C2的0)来统计的,但不是由父或子C1来统计的,所以其他的叉子不起作用

    然后C2进入另一个if条件,再制造两个叉子

                C2
              /    \
             C2     C3
           /   \   /  \
          C2   c4  c3  c5
    

    然后所有创建的进程(包括父进程)打印“Friend”输出7次