gpt4 book ai didi

c - fork()的执行过程

转载 作者:行者123 更新时间:2023-12-02 21:49:32 25 4
gpt4 key购买 nike

我执行了以下代码:

#include<stdio.h>

int main()
{
printf("hello \t");
fork();
fork();

return 0;
}

输出:hello hello hello hello

这是否意味着fork()为子进程创建与父进程代码完全相同的副本,但 fork() 除外执行的调用被消除了吗?

这让我很困惑,因为我在某个地方研究过“fork()从代码的下一行开始执行”。因此,如果这是真的,那么它应该创建 3 个子进程和 1 个父进程,并且应该打印 "hello"只有一次。

请解决这个问题。

我在 gcc 编译器上运行了这段代码。

最佳答案

这是因为字符串“hello”存储在父进程的输出缓冲区中。

printf 当遇到 \n 时刷新缓冲区,否则仅当缓冲区已满时才打印输出字符串。

默认情况下,子进程会继承父进程的缓冲区,所以如果缓冲区没有刷新,子进程的缓冲区也会包含“hello”。

如果:

#include<stdio.h>

int main()
{
printf("hello \n");
fork();
fork();

return 0;
}

您只会看到一个“你好”。

关于c - fork()的执行过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18909316/

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