为什么 fork() 会导致重复的输出

Why does fork() result in duplicated output?

本文关键字:输出 fork 为什么      更新时间:2023-10-16
#include <iostream>
#include <unistd.h>
#include <stdlib.h>
int main() {
    std::cout << 1;
    fork();
    exit(0);
}

fork在流式传输到cout后定位,但此代码打印 11。为什么?为什么如果将 std::endl 添加到 cout,代码只打印 1 ?

#include <iostream>
#include <unistd.h>
#include <stdlib.h>
int main() {
    std::cout << 1 << std::endl;
    fork();
    exit(0);
}

这是由流缓冲引起的。将std::endl插入流会导致流被刷新,因此当您分叉时,流缓冲区为空。当您不插入std::endl 时,流不会刷新,直到程序退出。 fork()会导致输出流重复,包括未刷新的内容。fork()之后有 2 个进程,其未刷新的输出缓冲区包含"1"。它们各自退出,刷新缓冲区,您会看到"11"。