我不明白stdio缓冲如何与子进程交互

时间:2013-09-14 19:25:06

标签: process c

我认为输出应该是第一个子进程应该执行第二个子进程然后父进程编译它给出第一个子行的第一行然后第二个子行的第一行然后再次第二行第二行和第二行第二行儿童。以下是有问题的代码:

#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;
}

1 个答案:

答案 0 :(得分:2)

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

如果您运行该代码足够多次,您将看到所有这六种可能性,尽管可能会有一两种特别的倾向。

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