如何使用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
相关产品推荐
相关产品推荐

