为什么父项在C中使用fork进行2次打印

问题描述

我正在学习fork(),然后尝试做一个小程序,在父母之前打印孩子。可以,但是父母打印了2次,我不明白为什么。

预期输出

4 5 6
1 2 3

实际输出

4 5 6
1 2 3
1 2 3

这是我的代码

int main (int argc,char** argv) {

    int childPid = fork();
    if (childPid == 0){
        printf("4 5 6\n");
    }

    wait(NULL);

    printf("1 2 3\n");
    exit(0);

}

解决方法

printf("1 2 3\n");行将由父级和子级执行。子项将面对 wait(NULL);行,但由于没有子项,因此将跳过它,并显示“ 1 2 3”,然后退出。同时,父母将收到孩子的终止状态,并通过打印“ 1 2 3”并退出来继续执行。为了使其正常工作,请对其进行相应的编辑:

int main (int argc,char** argv) {

    int childPid = fork();
    if (childPid == 0){
        printf("4 5 6\n");
        exit(0);
    }

    wait(NULL);

    printf("1 2 3\n");
    exit(0);

}