当前位置: 首页 > news >正文

自学嵌入式day30,回收进程

父子进程关系与进程终止机制

父子进程内存管理子进程通过fork()创建时,初始阶段完全共享父进程的内存空间(采用写时复制技术)。只有当父子进程尝试修改同一内存区域时,内核才会为子进程分配独立的内存副本。这种机制优化了资源使用效率。

进程终止的8种情况

  • 主函数main中执行return
  • 调用exit()函数(会清理I/O缓冲区和注册的退出函数)
  • 调用_exit()_Exit()(直接终止,不清理缓冲区)
  • 主线程退出或调用pthread_exit()
  • 异常终止:abort()、收到kill信号、最后一个线程被pthread_cancel

进程终止后的状态管理

僵尸进程与孤儿进程

  • 僵尸进程:子进程终止但父进程未回收其PCB资源,导致内核残留进程信息。长期运行的父进程若频繁创建短期子进程,可能引发内核资源耗尽。
  • 孤儿进程:父进程先终止,子进程由init进程接管并自动回收资源。

进程退出函数对比

  • exit(int status)
    行为:刷新缓冲区 → 调用atexit注册的函数 → 执行_exit
    状态码:EXIT_SUCCESS(0)或EXIT_FAILURE(1)
  • _exit(int status)
    行为:直接终止进程,不处理缓冲区或注册函数。

进程资源回收方法

wait函数

pid_t wait(int *status);
  • 阻塞等待任意子进程退出,并回收其状态。
  • status参数:
    • 若为NULL,忽略退出状态。
    • 使用宏解析状态:
      • WIFEXITED(status):是否正常退出。
      • WEXITSTATUS(status):获取退出返回值。
      • WIFSIGNALED(status):是否因信号终止。
      • WTERMSIG(status):获取终止信号的编号。

waitpid函数

pid_t waitpid(pid_t pid, int *status, int options);
  • pid参数:
    • -1:回收任意子进程(等价于wait)。
    • >0:回收指定PID的子进程。
    • 0:回收同进程组的子进程。
    • <-1:回收指定进程组内的子进程。
  • options参数:
    • 0:阻塞等待。
    • WNOHANG:非阻塞模式(立即返回,无子进程退出时返回0)。

示例:非阻塞回收

int status; pid_t pid = waitpid(-1, &status, WNOHANG); if (pid > 0) { if (WIFEXITED(status)) { printf("Child %d exited with code %d\n", pid, WEXITSTATUS(status)); } }

关键注意事项

  • 资源泄漏风险:长期运行的父进程必须通过wait/waitpid回收子进程,避免僵尸进程累积。
  • 信号处理:若子进程因信号终止,父进程需通过WTERMSIG检查具体信号。
  • 非阻塞模式WNOHANG适用于父进程需同时处理其他任务的情况。
http://www.jsqmd.com/news/89476/

相关文章:

  • 考虑可再生能源消纳的电热综合能源系统日前经济调度模型研究附Matlab代码
  • [iOS原理] Block的本质
  • 农作物检测和识别2:基于深度学习YOLOv12神经网络实现农作物检测和识别(含训练代码和数据集)
  • 计及N-k安全约束的含光热电站电力系统优化调度模型【IEEE14节点、118节点】附Matlab代码
  • MlaProlog算子全景透视-结构流程与依赖关系深度分析
  • 2025低成本AI认证指南:从入门到进阶的高性价比路径盘点
  • 计及调度经济性的光热电站储热容量配置方法【IEEE30节点】附Matlab代码
  • 2025年应届生闭坑指南:如何挑选低费用、高认可度的AI技能证书?
  • 计及需求响应的粒子群算法求解风能、光伏、柴油机、储能容量优化配置附Matlab代码
  • 基于YOLOv12农作物检测系统1:农作物检测数据集说明(含下载链接)
  • Java 大视界 -- Java 大数据在智能物流仓储货位优化与库存周转率提升中的应用实战
  • MouseTester终极指南:5步完成专业鼠标性能测试
  • Python基础五:了解和使用常用类型int、float、bool、str
  • 百度首页 登录 托福培训机构怎么选?2025高性价比推荐指南(附选课攻略) - 品牌测评鉴赏家
  • 深度解析:2PC与Saga分布式事务模式的技术选型实战
  • 农作物检测和识别3:基于深度学习YOLOv12神经网络实现农作物检测和识别(含训练代码、数据集和GUI交互界面)
  • 2025年儿童OK镜佩戴注意事项TOP5推荐榜单
  • 2025 雅思培训班红榜|亲测 3 家宝藏机构,选对少走 99% 弯路 - 品牌测评鉴赏家
  • Python基础六:算数运算符、赋值运算符、逻辑运算符与比较运算符
  • 1112 Stucked Keyboard
  • 钓鱼竿什么品牌好?钓鱼竿品牌排行榜前十名,钓鱼竿名单2025年12月更新 - 品牌2026
  • 从“看见”到“驾驭”:Ascend C硬件抽象层(HAL)的深度解构
  • AMD Ryzen性能调优:快速掌握处理器调试工具的使用技巧
  • 计及源荷不确定性的综合能源生产单元运行调度与容量配置优化研究附Matlab代码
  • (新卷,200分)- 字符串拼接(Java JS Python C)
  • 计算轴向磁铁和环状磁铁的磁场附Matlab代码
  • 从海外硕士到AI产品经理,他的转型之路藏着一个关键选择
  • IDEA 中 maven 图标失踪解决措施
  • 华硕笔记本性能调优新选择:G-Helper实战经验分享
  • 具有飞行约束的无人机MPC模型预测控制研究附Matlab代码