Unix fork()系统调用

时间:2012-01-02 17:02:58

标签: c unix fork system-calls

所有人的白天很好

我对fork()感到困惑。 fork()for fork子进程还是只有父进程?

请帮助解决一些例子

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

int main() {
  if (fork()) {
    fork();
    printf(" X\n");
  }
  return 0;
}

这就是我想要构建流程的方式:

    parent
      |
   /    \
Parent  Child

所以输出将是

  X X X

另一个例子是

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

int main() {
  fork();
  fork();
  fork();

  printf(" X \n");

  return 0;
}

图表会是这样的吗?

                 Fork start
                    /     \
                Parent    Child        1st fork done output 2 of X
                /  \      /   \
              P     C    P    C        2nd fork done output 4 of X
            / \    / \  /\    /\
           P  C   P  C P  C  P  C      3rd fork done output 8 of X

另一个问题我怎样画

if (fork() || fork() || fork())
  fork();

if (fork() && fork())
  fork();

如果有人纠正我,我会很高兴。

1 个答案:

答案 0 :(得分:3)

fork没有“创建父子进程”,没有。它创建当前进程的副本(副本是子进程,当前进程是父进程)。区别是基于fork返回值完成的。

相关问题