gpt4 book ai didi

process - 我不明白 stdio 缓冲如何与子进程交互

转载 作者:太空宇宙 更新时间:2023-11-04 08:53:15 25 4
gpt4 key购买 nike

我认为输出应该是第一个子进程,第二个子进程,然后是父进程,但是在编译时,它给出了第一个子进程的第一行,然后是第二个子进程的第一行,然后是第一个子进程的第二行和第二个子进程的第二行 child 。这是有问题的代码:

#include<stdio.h>
int main() {
int pid,dip;
pid=fork();
if(pid==0) {
printf("1st child's process id is %d \n",getpid());
printf("first child dead");
} else {
dip=fork();
if(dip==0) {
printf("2nd child process id is %d\n",getpid());
printf("Second child dead");
} else {
printf("Child with pid %d died \n",wait(0));
printf("Child with pid %d died \n",wait(0));
printf("I am the parent");
}
}

return 0;
}

最佳答案

那里的执行顺序是不确定的。共有三个进程,父进程和两个子进程。所以有3个! = 6 种可能的完成顺序。

如果您运行该代码足够多次,您将看到所有 6 种可能性,尽管可能会特别倾向于一两种。

因为在每个进程中有多个 printf()——其中一个没有用换行符刷新——所以有超过 6 种可能性 WRT 这些行出现的顺序。来自同一进程的两行将始终是连续的(即,第一行将出现在第二行之前),但来自另一个进程的行可能出现在它们之间。

关于process - 我不明白 stdio 缓冲如何与子进程交互,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18806225/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com