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

Ben*_*eed 12 c operating-system fork process

我相信这创造了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;
}
Run Code Online (Sandbox Code Playgroud)

sfs*_*man 30

通过这个很容易理由.该fork调用每次执行时都会创建一个额外的进程.该调用0在新(子)进程中返回,并在原始(父)进程中返回子进程id(非零).

pid_t pid = fork();  // fork #1
pid = fork();        // fork #2
pid = fork();        // fork #3
if (pid == 0)
{
  fork();            // fork #4
}
fork();              // fork #5
Run Code Online (Sandbox Code Playgroud)
  1. Fork#1创建了一个额外的进程.您现在有两个进程.
  2. Fork#2由两个进程执行,创建两个进程,总共四个进程.
  3. Fork#3由四个进程执行,创建四个进程,总共八个进程.其中有pid==0一半有一半有pid != 0
  4. Fork#4由fork#3创建的一半进程执行(因此,其中四个).这创建了四个额外的过程.你现在有12个进程.
  5. Fork#5由剩下的所有12个进程执行,创建了12个进程; 你现在有二十四岁.

  • `fork()`也可能无法返回`-1`,所以你可能会说'没有'超过24个进程,而不是'完全'24. (8认同)