谁能解释一下fork是如何工作的?

时间:2015-04-14 21:41:41

标签: c unix fork posix

我真的不明白fork()是如何工作的。我用一个fork来理解示例,但是当我有多个调用时,我没有。我有一个这样的例子,它打印4行你好,如何创建了很多流程?

int main(void)
{
       fork();
       fork();
       printf("hello\n");

       return 0;
}

2 个答案:

答案 0 :(得分:10)

fork()调用之后,两个进程(原始进程和衍生进程)继续从下一行代码执行。因此,两个进程都执行第二个fork()指令,因此最终您有 4 进程。因此,您会看到4个"hello"行打印的实例。

一张图片胜过千言万语:

fork illustrated

答案 1 :(得分:3)

fork()系统调用基本上创建了一个"克隆"执行它的过程。两个"克隆"运行几乎相同(除了fork()的返回值)。 对fork()的第一次调用由一个进程执行(让我们调用一个" P"),这将创建第二个进程" C"。现在有两个进程,它们都在main()函数中执行第二行。所以两个进程P和C都会创建一个新进程。这就是为什么你最终总共有4个进程,所有进程都打印出#34;你好"一次。

以下示例可能会使该行为更清晰:

int main() {
  printf("process %d: start\n", getpid());
  int r1 = fork();
  printf("process %d: first fork() returned %d\n", getpid(), r1);
  int r2 = fork();
  printf("process %d: second fork() returned %d\n", getpid(), r2);
}

在我的系统上,它输出以下内容:

process 12953: start
process 12953: first fork() returned 12954
process 12954: first fork() returned 0
process 12953: second fork() returned 12955
process 12955: second fork() returned 0
process 12954: second fork() returned 12956
process 12956: second fork() returned 0