【问题标题】:Why parent print 2 times with fork in c为什么父级在 c 中使用 fork 打印 2 次
【发布时间】:2020-12-12 21:22:33
【问题描述】:

我正在学习 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);

}

【问题讨论】:

    标签: c unix fork


    【解决方案1】:

    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);
    
    }
    

    【讨论】:

      猜你喜欢
      • 2011-10-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-03
      • 1970-01-01
      • 2022-06-12
      • 2017-07-30
      相关资源
      最近更新 更多