关于流程和睡眠()

时间:2013-10-09 17:22:05

标签: c linux sleep

我已经用C编写程序并在Ubuntu中运行,主要代码如下:

int main(){    
    pid_t pid=fork();
    if(pid==0){
        printf("d");
        exit(0);
    }
    else{
        printf("a");
        sleep(4);
    }
}

问题是:为什么代码sleep(4);printf("a");之前运行

希望有人能给我一个答案,谢谢!

3 个答案:

答案 0 :(得分:4)

不是。最有可能的是,printf()缓冲了它的输出,直到有机会输出缓冲区(在你的情况下,当进程终止时)。

答案 1 :(得分:3)

  

问:为什么代码sleep(4)在printf(“a”)之前运行?

答:printf(“a”)实际上运行 BEFORE “sleep(4)”,就像你在代码中看到的一样。

但是,它不会立即 DISPLAY

问题是“缓冲”。

在此查看更多详情:

建议替代方案:

pid_t pid=fork();
if(pid==0){
    fprintf(stderr, "d");
    exit(0);
}
else{
    fprintf(stderr, "a");
    sleep(4);
}

原因是“stderr”是无缓冲的:你会立即看到输出。

使用stderr的替代方法包括调用fflush(stdout)modifying the stream

答案 2 :(得分:2)

不是,但可能会出现这种情况。 printf将其输出放入缓冲区,该缓冲区可能仅在sleep运行后刷新。尝试在fflush(stdout)之后,但在致电printf之前拨打sleep