首页 > 解决方案 > 当 fork() 处于某个条件时会发生什么?

问题描述

谁能给我这段代码的输出(带有解释)?谢谢...

#include <stdio.h>
#include <unistd.h> 

int main() 
{ 
    if (fork() && (!fork())) { 
        if (fork() || fork()) {
            fork(); 
        } 
    } 
    printf("Friend\n");
    return 0; 
}

标签: cfork

解决方案


在进入代码之前,最好了解什么是 fork() 系统调用

fork() 系统调用由“父”进程创建一个新进程,新创建的进程称为“子”进程

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

这就是这里的线索

因此,从该程序计数器开始,所有两个进程都同时工作......

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

  1. 第一个 fork() 创建新的 C1 -> 0

  2. 第二个 fork() 创建新的 C2 -> !0 -> 1

所以第一个条件由 C2 (哪个父正整数和 c2 的 0)统计,但没有由父 C1 或子 C1 统计,所以其他叉子不会工作

然后C2进入另一个if条件并制作另外两个叉子

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

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


推荐阅读