C 使用这些fork()语句创建了多少个进程?

C 使用这些fork()语句创建了多少个进程?,c,process,operating-system,fork,C,Process,Operating System,Fork,我相信这创造了24个过程;但是,我需要核实。这些问题常常使我感到困惑。谢谢你的帮助 #include <stdio.h> #include <stdlib.h> #include <unistd.h> int main(void) { pid_t pid = fork(); pid = fork(); pid = fork(); if (pid == 0) { fork(); } fork(); return 0; }

我相信这创造了24个过程;但是,我需要核实。这些问题常常使我感到困惑。谢谢你的帮助

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

int main(void)
{
  pid_t pid = fork();
  pid = fork();
  pid = fork();
  if (pid == 0)
  {
    fork();
  }
  fork();
  return 0;
}
#包括
#包括
#包括
内部主(空)
{
pid_t pid=fork();
pid=fork();
pid=fork();
如果(pid==0)
{
fork();
}
fork();
返回0;
}

你是对的。是24。在最终返回语句之前,刚刚编译并运行了它。有24行输出。

这很容易理解。
fork
调用每次执行时都会创建一个额外的进程。调用在新(子)进程中返回
0
,在原始(父)进程中返回子进程的进程id(不是零)

  • Fork#1创建了一个额外的进程。现在有两个进程
  • Fork#2由两个进程执行,创建两个进程,总共四个
  • Fork#3由四个进程执行,创建四个进程,总共八个。其中一半具有
    pid==0
    ,另一半具有
    pid!=0
  • Fork#4由Fork#3创建的一半进程执行(因此,其中有四个进程)。这将创建四个额外的进程。现在有12个进程
  • Fork#5由所有剩余的12个进程执行,创建另外12个进程;你现在有二十四个

  • 这样计算:

    从1(主进程)开始,如果fork不在内部,则为每个fork设置两次(pid==0),否则将当前进程的1/2添加到当前进程数中

    在代码中: 1P 得到了#1 fork(),因此将当前进程数加倍。现在新的进程数2P

    得到了#2 fork(),因此将当前进程数加倍。现在是新的流程4P数量

    得到了#3 fork(),因此将当前进程数加倍。现在是新的进程8P数

    得到了#4 fork(),但等待它处于if条件so(8+4=12)p


    得到了#5 fork(),因此将当前进程数加倍。现在新的进程数24P

    此语句有24个以上的子进程。
    每次调用fork()都会导致两个进程:子进程和父进程。因此,第一个fork会导致两个过程。这两个进程到达第二个fork(),生成四个进程。最后一个fork()是由这四个进程完成的,另外还有八个进程。除了一个以外,所有这些进程(原始进程)都是至少一个fork的子进程。

    将printf放入其中,然后编译并运行它,您将看到。
    fork()
    也可能无法返回
    -1
    ,因此您可能会声明“不超过”24个进程,而不是“完全”24个。
    pid_t pid = fork();  // fork #1
    pid = fork();        // fork #2
    pid = fork();        // fork #3
    if (pid == 0)
    {
      fork();            // fork #4
    }
    fork();              // fork #5