【问题标题】:How many processes are created after four fork() in Linux?Linux中四个fork()后创建了多少个进程?
【发布时间】:2016-04-22 13:22:11
【问题描述】:

我在操作系统教科书中看到了一个愚蠢的问题。问题如下:
假设所有fork系统调用都成功。执行如下所示程序后。屏幕上有多少行?
我假设每个 fork 调用都会使进程加倍,因此结果应该是创建了 16 个进程。但是当我从教科书中输入相同的代码时,我得到了 30 行。这是结果和代码:
http://imgur.com/zrdOP0X

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

int main(){
    fork();
    printf("After fork1\n");
    fork();
    printf("After fork2\n");
    fork();
    printf("After fork3\n");
    fork();
    printf("After fork4\n");
}

【问题讨论】:

  • 分叉分叉。

标签: c linux operating-system


【解决方案1】:

但是当我从教科书中输入相同的代码时,我得到了 30 行

正常的:

  • fork 1 之后,你有 2 个进程,所以写了 2 行,
  • fork 2 之后,你有 4 个进程,所以写了 4 行,
  • fork 3 之后,有 8 个进程,所以写了 8 行,
  • fork 4 之后,你有 16 个进程,所以写了 16 行,

2+4+8+16 等于 30:你有 30 行。

【讨论】:

    【解决方案2】:

    结果应该是这样的:

    fork1 fork2 fork3 fork4 fork4 fork3 fork4 fork4
    fork2 fork3 fork4 fork4 fork3 fork4 fork4 fork1 fork2 fork3 fork4 fork4 fork3 fork4 fork4
    fork2 fork3 fork4 fork4 fork3 fork4 fork4

    (空格只是为了更好的阅读)

    【讨论】:

    • 这个答案可以用一个数字来改进
    猜你喜欢
    • 2013-10-07
    • 2014-02-14
    • 2017-02-25
    • 2014-02-03
    • 2021-01-18
    • 2020-09-12
    • 1970-01-01
    • 2014-07-20
    • 2013-11-01
    相关资源
    最近更新 更多