c++ - fork() 和输出

标签 c++ linux unix fork

我有一个简单的程序:

int main()
{
    std::cout << " Hello World";
    fork();
}

程序执行后我的输出是:Hello World Hello World。为什么会发生这种情况而不是单个 Hello world?我猜想子进程在幕后重新运行,并且输出缓冲区在进程之间共享或类似的东西,但是这种情况还是发生了其他事情?

最佳答案

这与您最初的想法不太一样。输出缓冲区不共享 - 当您执行 fork 时,两个进程都会获得同一个缓冲区的拷贝。因此,在你 fork 之后,两个进程最终都会刷新缓冲区并将内容分别打印到屏幕上。

只有在 cout 是缓冲 IO 时才会发生。如果你使用了没有缓冲的 cerr,你应该只会看到一次消息,pre-fork。

关于c++ - fork() 和输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9364410/

相关文章:

Linux - 使用第二个进程建立 IPC 的选项

shell - shell 的 `source` 是 POSIX 标准的吗?

java - 执行jar文件以加载类路径中的文件

c++ - 找不到 MySQL c++ 连接器 API 的任何在线文档

c++ - 错误: "cannot instantiate abstract class"的解决方法

c++ - 段错误,当使用 cmake 编译时没有 cout

c++ - Code::Blocks v12.11 包含 .lib 到项目

linux - 基于Linux Docker+Rethinkdb镜像调整Azure VM大小,数据丢失,这是可以预料的吗?

java - 将 Java 线程 ID 与 native Linux PID 匹配

http - 如何检查特定服务器上所有可用的 URL?