父进程和子进程计时

时间:2015-02-08 04:48:28

标签: c++ c process parent-child

嗨,我有一个简单的问题,但时间问题让我感到不安。假设这是代码。

#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情况),我只看到“完成了!”一旦。

1 个答案:

答案 0 :(得分:3)

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

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

如果您愿意,可以在父进程中使用wait()之类的内容来等待您的子进程。