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

fork创建的父子进程输出是否受调度器影响?结果是否确定?

问题解答

结论

你的代码输出结果是确定的,父子进程会分别输出 Child process: Number is 400 和 Father process: Number is 500,进程调度器不会改变这个结果。

原因分析

当调用fork()函数后,操作系统会创建一个新的子进程,这个子进程会复制父进程的整个地址空间(包括栈、堆、全局变量等)。也就是说,父子进程拥有完全独立的内存空间,各自的number变量是完全分开的副本,彼此之间的修改不会互相影响:

  • 子进程里把number改成400,修改的是自己内存里的副本,和父进程的number无关
  • 父进程里把number改成500,修改的也是自己的副本,不会影响子进程的number

进程调度器只会决定父子进程的执行顺序(比如可能先执行父进程的printf,也可能先执行子进程的printf),但不管谁先执行,各自输出的number值都是自己修改后的400和500,不会出现互相覆盖的情况。

你的代码

#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>

int main() {
    int pid, status, number = 300; // Create a process (fork)
    pid=fork();
    if(pid==0) {
        // Child process
        number = 400;
        printf("Child process: Number is %d\n",number); // Terminate OK
        exit(0);
    } else {
        // Father process
        number = 500;
        printf("Father process: Number is %d\n",number); // Wait for child to finish
        wait(&status);
    }
    return 0; // Terminate OK
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 16:05:48