You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言调用fork()后printf重复打印两次的问题该如何解决

问题原因
  • fork()调用会复制当前进程生成独立的子进程,父子进程都会从fork()调用的下一行代码开始执行,当前代码未区分父子进程逻辑,printf语句被父子进程各执行一次,因此会输出两次文本。
  • 终端输出格式异常是因为父进程先于子进程结束,父进程退出后shell立刻打印提示符,随后还在运行的子进程输出的内容就会被打印到提示符后方。
修复方案

通过fork()的返回值区分父子进程的执行逻辑,同时父进程调用wait()等待子进程执行完毕后再退出,修复后的代码如下:

#include<stdio.h>
#include<unistd.h>
#include<sys/wait.h>

int main(){
    int x;
    pid_t myPID,childPID;
    x=10;
    myPID = getpid();
    childPID=fork();

    if(childPID < 0){
        perror("fork error");
        return 1;
    }else if(childPID == 0){
        printf("%s \n","how are you");
        return 0;
    }else{
        wait(NULL);
        return 0;
    }
}

修复后仅子进程会执行打印逻辑,文本只会输出一次,同时父进程等待子进程执行完毕后才退出,不会出现文本打印在shell提示符后的格式异常。

内容的提问来源于stack exchange,提问作者Bobi Biswas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.08 20:00:00