gpt4 book ai didi

c++ - 父进程和子进程计时

转载 作者:太空宇宙 更新时间:2023-11-04 07:11:04 25 4
gpt4 key购买 nike

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

#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 的 sleep 时间均为 1 秒时,总是执行两次。因为我注意到当我在子进程中将 sleep 时间增加到 10 秒时(p==0 情况),我只看到“完成!”一次。

最佳答案

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

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

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

关于c++ - 父进程和子进程计时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28390674/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com