繁体   English   中英

在Linux中四次fork()之后创建了多少个进程?

[英]How many processes are created after four fork() in Linux?

我在操作系统教科书上看到一个愚蠢的问题。 问题如下:
假定所有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");
}

但是当我从课本中键入相同的代码时,我得到了30行

这是正常的:

  • 在fork 1之后,您有2个进程,因此写入了2行,
  • 在fork 2之后,您有4个过程,因此写入了4行,
  • 在fork 3之后,您有8个进程,因此写入了8行,
  • 在fork 4之后,您有16个进程,因此写入了16行,

2 + 4 + 8 + 16等于30:您有30条线。

结果应该是这样的:

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

(空格仅用于更好地阅读)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM