为什么所有孩子都执行主要代码?

时间:2017-04-18 15:41:48

标签: c

我有两个孩子和他父亲的代码,但是有一个问题,因为所有的孩子(和父亲在main上执行代码)。

代码:

int main() {
  switch (fork()) {
  case 0:     //child1
    break;
  default:
    switch (fork()) {
    case 0:   //child2
      break;
    default:  //father
      break;
    }
  }
  printf("hi\n");
}

输出:

hi
hi
hi

1 个答案:

答案 0 :(得分:1)

使用fork()时,除了fork()调用的返回值之外,它会创建父进程的几乎完全相同的副本。除了依赖于返回值的任何内容之外,它们都会继续并执行所有相同的代码。

由于对printf()的调用不是有条件的,因此它将在父进程和子进程中执行。如果您希望它仅在特定进程中执行,则应将其放在switch()语句的该分支中。