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

多进程代码中Line B处wait()循环的作用与含义技术问询

多进程代码中Line B的wait()循环用途及含义解析

让我来拆解这段代码里Line B的循环和wait()的作用,帮你搞明白它到底在做什么:

Line B循环的核心含义

for(i = 0; i < 10; i++) //Line B
    wait();

这个循环会让父进程调用10次wait()系统调用——每一次wait()都会让父进程暂停执行,直到它的任意一个子进程终止运行。因为你之前正好创建了10个子进程,所以循环10次刚好能覆盖所有子进程的回收操作。

这个循环的关键用途

  • 彻底回收子进程资源,避免僵尸进程:子进程执行完毕退出后,它的内核资源(比如PID、退出状态等)不会自动释放,必须由父进程调用wait()来回收。如果父进程不做这件事,这些子进程会变成「僵尸进程」,一直占用系统的PID资源,直到系统重启或者父进程退出。10次wait()正好对应10个子进程,能确保所有子进程都被正确回收。
  • 保证父进程等待所有子进程完成:如果没有这个循环,父进程可能在子进程还在运行function_A()的时候就提前结束了。加上这个循环后,父进程会一直阻塞,直到所有10个子进程都执行完毕、被回收,才会继续执行后续代码(如果有的话)。
  • 可获取子进程退出状态(代码未利用):其实wait()可以接收一个参数(比如wait(&status)),用来获取子进程的退出状态码,你可以通过这个值判断子进程是正常退出还是异常终止,不过你的代码里没有用到这个功能。

额外小提示

你的代码里有个容易踩坑的细节:if (pid = fork() < 0)这里的运算符优先级有问题,fork() < 0的结果是布尔值(0或1),会被赋值给pid,导致你无法正确拿到子进程的PID。应该改成if ((pid = fork()) < 0),这样才能先把fork()的返回值赋值给pid,再判断是否小于0。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:36:39