为什么 child_1 会在 parent 之前打印?

Why child_1 will print before parent?

我有一个父进程将 fork() 子进程的 C 代码:

int main(){
    pid_t child_1;
    child_1 = fork();
    if (child_1 > 0){
        printf("Parent: (PID %d)\n", getpid());
        wait(NULL);
    }
    else if (child_1 == 0){
        printf("child: %d", getpid());
    }
}

输出为:

Parent: (PID 1234)
child: 1235

但是如果我删除父项 printf 中的 \n ,输出将变为:

child: 1235Parent: (PID 1234)

我不确定为什么,我尝试了不同的 OS 并且输出是相同的。提前致谢。

printf 是行缓冲的。这意味着它不会实际输出,直到遇到换行符或完成显式刷新(例如当进程退出时)。因此,在您的情况下,当父进程实际输出时删除换行符更改。由于父级等待子级退出,这意味着父级刷新将在子级输出后发生。