【发布时间】:2021-10-05 00:10:56
【问题描述】:
我有一个 C 代码,父进程将 fork() 子进程:
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)
我不知道为什么,我在不同的操作系统上尝试过,结果是一样的。提前致谢。
【问题讨论】:
-
因为进程可能是并行执行的,严格来说你不应该期望任何特定的顺序。
-
@Cheatah 感谢您的快速回复。所以它不是由
printf()中的\n引起的,如果我理解正确的话,如果我确实有\n,有时会发生这种情况?但是我一次又一次地尝试运行,无论有没有\n字符,我总是得到相同的结果。 -
printf是行缓冲的。这意味着它实际上不会输出,直到遇到换行符或完成显式刷新(例如当进程退出时)。因此,在您的情况下,当父进程实际输出时删除换行符更改。由于父级等待子级退出,这意味着父级刷新将在子级输出后发生。 -
@kaylum 这很有道理,非常感谢。