parent 进程和 child 进程时间

parent process and child process timing

嗨,我有一个简单的问题,但是时间问题让我很困扰。假设这是代码。

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

我的问题是,当 parent 和 child 的睡眠时间均为 1 秒时,"done!" 是否总是会执行两次。因为我注意到当我在 child 过程中将睡眠时间增加到 10 秒时(p==0 情况),我只看到 "done!" 一次。

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

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

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