【问题标题】:parent process and child process timing父进程和子进程时序
【发布时间】:2015-02-08 04:48:28
【问题描述】:

您好,我有一个简单的问题,但是时间问题困扰着我。假设这是代码。

#include <stdio.h>

int main() {
    int p = fork();
    if (p==0) {
        printf("ok\n");
        sleep(1);
    } else {
        printf("hey!");
        sleep(1);
    }
    printf("done!");
    return 0;
}

我的问题是,将“完成!”当父母和孩子的睡眠时间为 1 秒时,总是执行两次。因为我注意到当我在子进程中将睡眠时间增加到 10 秒时(p==0 情况),我只看到“完成!”一次。

【问题讨论】:

    标签: c++ c process parent-child


    【解决方案1】:

    我认为当您增加睡眠时间时,父进程退出速度更快并且标准输出文件描述符关闭。请注意,子进程和父进程共享它们的文件描述符。

    如果你愿意,你可以在你的父进程中使用_exit(),这样当它退出时,子进程文件描述符将不会被关闭。以这种方式在 10 秒后您会看到“完成!”在您的终端中。要使用此方法,您必须使用 printf("done!\n") 手动刷新缓冲区,因为 _exit() 没有刷新缓冲区。

    如果你愿意,你可以在你的父进程中使用类似wait() 的东西来等待你的子进程。

    【讨论】:

    • 但是会在 sleep(1) 时总是打印两次事件吗?
    • 不,不能保证,您需要按照答案中的建议等待()
    猜你喜欢
    • 2016-06-29
    • 2013-08-11
    • 1970-01-01
    • 1970-01-01
    • 2023-04-11
    • 1970-01-01
    • 2017-08-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多