父进程和子进程计时

parent process and child process timing

本文关键字:子进程 进程      更新时间:2023-10-16

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

#include <stdio.h>
int main() {
    int p = fork();
    if (p==0) {
        printf("okn");
        sleep(1);
    } else {
        printf("hey!");
        sleep(1);
    }
    printf("done!");
    return 0;
}

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

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

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

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