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

使用fork()创建多进程时,进程是否需执行完毕才切换?

多进程fork后的输出交错问题

问题场景

代码中通过3次fork()生成总计8个进程,代码如下:

int main() {
 fork();
 fork();
 fork();
 printf("First print statement.\n");
 printf("Second print statement.\n");
 return 0;
}

已知这些进程的执行顺序无固定规则,在不使用wait(NULL)的情况下,是否必须一个进程完全执行完毕(连续打印两条输出语句)后,另一个进程才能开始执行?还是会出现不同进程的输出语句交错的情况?

回答

会出现不同进程的输出语句交错的情况,原因如下:

  • 现代操作系统的进程调度是抢占式的,每个进程只能获得有限的CPU时间片。当一个进程的时间片耗尽,内核调度器会暂停它,切换到其他处于就绪状态的进程执行。
  • 代码中的两个printf是独立的操作,中间没有任何同步机制(比如锁、信号量或wait)。完全可能出现这样的场景:进程A执行完第一个printf后,时间片耗尽,调度器切换到进程B,进程B执行第一个printf甚至第二个printf,之后才切回进程A执行剩下的第二个printf。
  • 举一个可能的交错输出示例:
    First print statement.
    First print statement.
    Second print statement.
    First print statement.
    Second print statement.
    Second print statement.
    ...
    
  • 没有同步手段的情况下,内核不会保证某个进程必须完整执行所有代码后才调度其他进程,进程的执行片段完全由调度策略决定。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 17:55:20