【问题标题】:About process and sleep()关于进程和 sleep()
【发布时间】:2013-10-09 17:22:04
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: c linux sleep


    【解决方案1】:

    事实并非如此。最有可能的是,printf() 缓冲其输出,直到有机会输出缓冲区(在您的情况下,当进程终止时)。

    【讨论】:

    • 是的,OP 应该使用\nfflush(stdout)
    【解决方案2】:

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

    A:printf("a") 实际上运行 BEFORE "sleep(4)",就像你在代码中看到的那样。

    但是,它不会立即显示

    问题是“缓冲”。

    查看这里了解更多详情:

    建议的替代方案:

    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

    【讨论】:

      【解决方案3】:

      它不是,但它可能看起来那样。 printf 将其输出放入缓冲区中,该缓冲区可能仅在 sleep 运行后才被刷新。尝试在printf 之后、sleep 之前调用fflush(stdout)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-09-20
        • 2017-01-13
        • 1970-01-01
        • 2014-03-02
        • 1970-01-01
        • 1970-01-01
        • 2011-04-22
        相关资源
        最近更新 更多