【问题标题】:Fork how many processes created confusedfork 多少进程创建混淆
【发布时间】:2021-01-18 18:45:51
【问题描述】:

假设我有以下程序

pid_t pid = fork();  // fork #1
pid = fork();        // fork #2

现在我们有什么:

  1. Fork #1 创建一个额外的进程。所以现在我们有两个 进程。
  2. Fork #2 由两个进程执行,创建两个 进程,共四个。

我的困惑是在第一次分叉之后我们将有两个进程 P1(父)和 C1(子)。每个进程将执行第二次分叉一次。那么我们不应该有 6 个进程,因为 P1 会再创建两个,C1 也会创建?还是只有 P1 可以执行第二个 fork 创建 P2 C2

【问题讨论】:

    标签: c linux process operating-system fork


    【解决方案1】:

    一个好的一般规则是一个进程调用fork,但有两个从它返回(当然,假设它有效)。

    两个返回进程继续执行fork 返回之后,我怀疑你的人还没有完全理解基于你的困惑。

    这意味着您在第一个 fork 中从一个进程变为两个进程,然后 每个 这些进程再次调用 fork,因此进程计数加倍然后再加倍 (1 -> 4)。基本上:

    1  -> fork#1 -+-> 1 -> fork#2 -+-> 1
                  |                |
                  |                +-> 3
                  |
                  +-> 2 -> fork#2 -+-> 2
                                   |
                                   +-> 4
    

    【讨论】:

    • so fork() 会根据我们之前有多少进程被调用?
    【解决方案2】:

    C1 不会执行分叉两次,只会执行一次。 P1 将执行两次,这将导致 C1 和 C2。 C1 将只执行第二个分叉。 最终结果是 4 个进程。 这是一个可视化: P1 -> C2 第二叉 |第一的 V叉 C1 -> C3 子进程的第二个分支

    【讨论】:

      猜你喜欢
      • 2014-02-14
      • 2017-02-25
      • 2013-10-07
      • 1970-01-01
      • 2020-09-12
      • 1970-01-01
      • 2014-07-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多