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

如何使用fork()函数处理父子进程?实现子进程优先执行的方法

问题解答

为什么父进程先输出?

fork()创建子进程后,父进程和子进程的执行顺序完全由操作系统的进程调度器决定,不存在父进程优先级更高的固定规则。调度器会根据系统当前的CPU负载、进程状态等多种因素选择下一个执行的进程,你的测试中恰好父进程先被调度到,所以先打印了6-10。

如何让子进程先运行?

要实现子进程先打印1-5,父进程需要等待子进程执行完成后再继续运行,这可以通过wait()或waitpid()函数实现,它们会让父进程阻塞,直到子进程结束。

修改后的代码:

#include <unistd.h>
#include <stdio.h>
#include <sys/wait.h>  // 新增头文件,用于wait()函数

/**
 * main - Entry point for my program
 *
 * Return: On success, it returns 0.
 * On error, it returns 1
 */
int main(void)
{
        int id = fork();
        int n, i;

        if (id == 0) {
                n = 1;
                for (i = n; i < n + 5; i++)
                        printf("%d\n", i);
        } else {
                wait(NULL);  // 父进程等待子进程结束
                n = 6;
                for (i = n; i < n + 5; i++)
                        printf("%d\n", i);
        }
        return (0);
}

代码说明:

  • 新增<sys/wait.h>头文件,wait()函数的声明包含在此文件中。
  • 在父进程的代码块中添加wait(NULL),它会让父进程暂停执行,直到子进程退出,以此保证子进程先完成打印操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 01:05:29