【发布时间】:2021-05-30 12:28:20
【问题描述】:
我很难理解fork() 的行为。我认为子进程将在fork()“之后”执行行。所以我希望只看到一个“Hello world!”,但是这段代码:
printf("Hello World!\n");
fork();
return 0;
输出两个“Hello World”。这是为什么呢?
我还从使用pipe() 的在线示例中注意到,管道是在分叉子节点之前创建的。父进程创建管道后,子进程怎么也有管道?
【问题讨论】:
-
你能给我们最简单的完整代码来复制这个问题吗?这段代码是来自
main还是return去某个地方? -
每个帖子问一个问题。关于输出出现两次的问题与关于为什么孩子和父母都有一个父母打开的管道的问题是分开的。
-
printf函数被缓冲。它可以写入缓冲区,然后在您调用fflush或您的进程终止之前不刷新缓冲区。如果父母安排在正常终止时做一些您不希望孩子也做的事情,则不应允许两个分叉进程正常终止。
标签: c operating-system pipe fork unnamed-pipes