0

我认为输出应该是第一个子进程应该执行第二个子进程,然后是父进程,但是在编译时它给出了第一个孩子的第一行,然后是第二个孩子的第一行,然后是第一个孩子的第二行和第二个孩子的第二行。这是有问题的代码:

#include<stdio.h>
int main() {
  int pid,dip;
  pid=fork();
  if(pid==0) {
    printf("1st child's process id is %d \n",getpid());
    printf("first child dead");
  } else {
    dip=fork();
    if(dip==0) {
      printf("2nd child process id is %d\n",getpid());
      printf("Second child dead");
    } else {
      printf("Child with pid %d died \n",wait(0));
      printf("Child with pid %d died \n",wait(0));
      printf("I am the parent");
    }
  }

  return 0;
}
4

1 回答 1

2

那里的执行顺序是不确定的。共有三个进程,父进程和两个子进程。所以有3个!= 6 种可能性,就它们完成的顺序而言。

如果您运行该代码足够多的时间,您将看到所有 6 种这样的可能性,尽管可能特别倾向于一种或两种。

由于有几个printf()s - 其中一个没有用换行符刷新 - 在每个进程中,只有 6 种可能性 WRT 这些行出现的顺序。来自同一进程的两行将始终是连续的(即,第一个将出现在第二个之前)但来自另一个进程的一行可能会出现在它们之间。

于 2013-09-14T19:39:40.880 回答