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

fork创建子进程后子进程为何执行了本该属于父进程的代码?

问题根因解释

你混淆了fork()的返回值和getpid()的返回值概念,核心错误点如下:

  • 你认知中的"子进程的PID始终为0"是错误的:系统中PID为0的是内核idle进程,所有用户态进程的PID都为大于0的正整数,子进程也不例外。因此你写的判断条件(int)getpid() == 0永远为假,父子进程都会进入else分支打印"I am parent"
  • 区分父子进程的正确判断依据是fork()的返回值:fork()执行完成后,会给父进程返回新创建的子进程的PID(正整数),给子进程返回0,0是fork给子进程的返回标记,不是子进程自身的PID。
修正后的代码示例
pid_t child_Pid1 = fork();

if(child_Pid1 == 0) {
    // 只有子进程会进入该分支
    printf("I am child\n");
} else if (child_Pid1 > 0) {
    // 只有父进程会进入该分支
    printf("I am parent\n");
} else {
    // fork执行失败的异常处理
    perror("fork failed");
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 01:09:01