理解unix fork

理解unix fork,unix,process,fork,Unix,Process,Fork,有人能解释为什么包含“here”的行被执行了5次,程序是如何运行的,因为我似乎不明白我是如何得到这个输出的 输出: 12958: 0 here 12959: 0 12958: 0 here 12958: 1 here 12960: 1 12958: 0 here 12958: 1 here 代码: #包括 #包括 #包括 #包括 #包括 int main(){ int i; 对于(i=0;i它不应该得到您提到的输出 这里是11194:0 11194:1在这里 11195:0 11196:1 也

有人能解释为什么包含“here”的行被执行了5次,程序是如何运行的,因为我似乎不明白我是如何得到这个输出的

输出:

12958: 0 here
12959: 0
12958: 0 here
12958: 1 here
12960: 1
12958: 0 here
12958: 1 here
代码:

#包括
#包括
#包括
#包括
#包括
int main(){
int i;

对于(i=0;i它不应该得到您提到的输出

这里是11194:0

11194:1在这里

11195:0

11196:1


也许您应该重新编译它,然后再试一次?

Fork创建了一个几乎相同的进程,包括输出缓冲区。如果在
Fork
之前没有刷新这些缓冲区,两个进程都可能最终打印出内容。试着放一个
fflush(stdout);
在家长的
printf

之后,你在什么系统上运行这个?我明白了。不过,在不同的系统上,它是不同的,这取决于输出缓冲的工作方式。使用该网站运行它实际上是在*nix机器上运行的。是的,我知道,但我认为值得一提的是,它不像ooga说的那样是本地的这里有一个更详细的解释
#include <sys/wait.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>

int main(){
    int i;
    for(i=0; i<2; i++){
        printf("%d: %d here\n", getpid(), i);
        if(fork()==0){
            printf("%d: %d\n", getpid(), i);
            exit(0);
        }
    }
    for(i=0; i<2; i++){
        wait(0);
    }
    return 0;
}