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

为何调用fork()的代码输出20次YES?求解析fork执行次数

代码中fork()执行次数分析

先明确两个关键前提:

  • fork()调用后,父进程返回子进程的PID(非0,布尔逻辑中视为真),子进程返回0(布尔逻辑中视为假);
  • C语言的短路求值规则:&&左侧为真才执行右侧,左侧为假则跳过右侧;||左侧为真则跳过右侧,左侧为假才执行右侧。

逐行分析fork()执行次数

第4行:fork();

初始只有1个进程,执行这次fork后,产生1个新进程,总进程数变为2。

  • 本次fork执行次数:1次。

第5行:fork() && fork()||fork();

当前有2个进程,每个进程执行这一行的逻辑完全一致,先分析单个进程的执行路径:

  1. 执行第一个fork()(记为F1):
    • 父进程(原进程)得到非0值,继续执行&&右侧的第二个fork()(F2);
    • 子进程(F1创建)得到0值,跳过&&右侧的F2,直接执行||右侧的第三个fork()(F3)。
  2. 父进程执行F2:
    • 父进程得到非0值,F1&&F2结果为真,跳过||右侧的F3;
    • 子进程(F2创建)得到0值,F1&&F2结果为假,执行||右侧的F3。

单个进程执行这一行时,会触发4次fork:F1、F2、F1子进程的F3、F2子进程的F3。
2个进程执行这一行,总共触发2×4=8次fork,执行完成后总进程数变为2×5=10(每个原进程执行完这一行后会变成5个进程)。

第6行:fork();

当前有10个进程,每个进程都会执行这次fork,每个fork产生1个新进程,总共触发10×1=10次fork,执行完成后总进程数变为20。

总fork()执行次数

将三次的次数相加:1 + 8 + 10 = 19次。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 10:55:07