获取不同的C程序输出?这个程序输出什么?

问题描述:

我想获得这个程序的输出,但它似乎有所不同,这取决于我运行它的环境。获取不同的C程序输出?这个程序输出什么?

Is is ABCADEABC or ABCABCADE or ABCADE or EABCDBC or EABCCD?

我相信我应该得到ABCABCADE,但我想知道为什么我得到不同的结果,当他们是相同的代码?

我应该得到什么?

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

int main(void) { 
int pid; 

    pid= fork(); 
    if (pid == 0) { 
     fprintf(stdout, "A\n"); 
     pid= fork(); 
     if (pid==0) { 
      fprintf(stdout, "B\n"); 
      pid=fork(); 
      fprintf(stdout, "C\n"); 
     } 
     else { 
      wait(NULL); 
      fprintf(stdout, "D\n"); 
     } 
    } 
    else { 
     fprintf(stdout, "E\n"); 
     wait(NULL); 
    } 
    // your code goes here 
    return(0); 
} 
+3

请将代码作为可复制/粘贴的文本进行编译和运行。发布显示问题的[最小,完整和可验证示例](http://stackoverflow.com/help/mcve)。清楚输入,预期输出和实际输出。我们所有的是一个图像链接和一些ABC华夫饼。陈述环境,在其中工作/不工作。 –

+0

在文本中发布代码,而不是图像。剪切并粘贴问题中的代码,并通过选择并缩进它并键入Alt-K – chqrlie

+0

修复它希望 – Kyle

操作系统的调度程序能够运行在它想要的任何顺序的过程,所以也不能保证其订购的语句将被执行。一个现代操作系统上一个好的调度算法会考虑许多因素,例如IO进程如何限制进程以及它使用的执行时间有多少 - 抢先进行的上下文切换可能发生在每秒约60次。我们无法确定这些因素究竟会如何发挥出来,因为我们的流程可能会与系统上的其他数百个流程一起运行,所以没有正确的声明顺序。