为什么 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
是行缓冲的。这意味着它不会实际输出,直到遇到换行符或完成显式刷新(例如当进程退出时)。因此,在您的情况下,当父进程实际输出时删除换行符更改。由于父级等待子级退出,这意味着父级刷新将在子级输出后发生。
我有一个父进程将 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
是行缓冲的。这意味着它不会实际输出,直到遇到换行符或完成显式刷新(例如当进程退出时)。因此,在您的情况下,当父进程实际输出时删除换行符更改。由于父级等待子级退出,这意味着父级刷新将在子级输出后发生。