news 2026/6/11 18:04:11

自学嵌入式day30,回收进程

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
自学嵌入式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适用于父进程需同时处理其他任务的情况。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/10 16:50:51

【BuildFlow 筑流】计量单位与Unitrix库技术方案

1. 概述 BuildFlow(筑流)作为专业的项目管理平台,需要一个强大、统一、可扩展的计量单位管理系统。Unitrix库应运而生,它采用矩阵化和齐次坐标的数学方法,为项目管理中的时间、长度、角度、资源等多维度度量提供统一的解决方案。 1.1 Unitrix名称意义 Unit(单位):度量…

作者头像 李华
网站建设 2026/6/10 17:06:25

【单片机毕业设计】【mcugc-mcu918】基于单片机的脉搏检测仪系统

一、基本介绍功能简介&#xff1a;1、通过脉搏检测模块检测脉搏&#xff0c;通过按键启动&#xff0c;10s后获取脉搏值&#xff0c;结束后蜂鸣器响1.5s。 2、当检测结束后&#xff0c;通过语音播报模块播报当前脉搏值&#xff0c;并提示“您的脉搏数正常”、“您的脉搏数偏高”…

作者头像 李华
网站建设 2026/6/10 14:27:20

MySQL 8.0 SQL优化黑科技,面试官都不一定知道!

MySQL 8.0 SQL优化黑科技&#xff0c;面试官都不一定知道&#xff01; MySQL 8.0&#xff08;2018年发布&#xff09;带来了大批“黑科技”级优化特性&#xff0c;许多老面试官还停留在5.7时代&#xff0c;这些新特性能让查询性能飞起、索引维护零风险、统计更精准。实际生产中…

作者头像 李华
网站建设 2026/6/11 16:10:47

ComfyUI-Manager跨版本迁移终极指南:从备份到优化全流程

ComfyUI-Manager跨版本迁移终极指南&#xff1a;从备份到优化全流程 【免费下载链接】ComfyUI-Manager 项目地址: https://gitcode.com/gh_mirrors/co/ComfyUI-Manager 面对ComfyUI-Manager版本升级带来的配置丢失、节点失效等困扰&#xff1f;这份完整迁移方案将带你系…

作者头像 李华
网站建设 2026/6/10 14:30:01

怎么这么多StringUtils——Apache、Spring、Hutool全面对比

怎么这么多StringUtils&#xff1f;Apache、Spring、Hutool全面对比 Java开发者经常吐槽&#xff1a;“StringUtils这么多&#xff0c;到底用哪个&#xff1f;”没错&#xff0c;org.apache.commons.lang3.StringUtils&#xff08;Apache Commons Lang&#xff09;、org.sprin…

作者头像 李华
网站建设 2026/6/10 14:32:23

模电概念复习(概念完结篇)

频率响应请看第六章引言及6.1内容●注意&#xff1a;本章的模型和计算过程比较复杂&#xff0c;不做要求&#xff0c;但需要了解原理和概念。 ●由于什么的存在&#xff0c;放大电路对不同频率的正弦呈现不同的放大能力&#xff1f;由于电容、电感等电抗元件以及晶体管极间电容…

作者头像 李华