固件升级时fd一直增加,升级十几次后crash

news/2025/12/17 10:50:22/文章来源:https://www.cnblogs.com/zwh0214/p/17805299.html

固件升级流程,升级软件向app进程发送升级指令,在app中使用system(“./app.sh upgrade start”)执行脚本,启动upgrade进行升级包接收,同时关闭app进程;但发现升级完成后fd增加,app进程打开的fd存在两份;

分析原因:在使用 system 函数创建子进程执行脚本时,子进程会继承父进程的文件描述符。当你在脚本中使用 kill 命令杀死进程A时,并不会直接导致文件描述符减少。

如果子进程没有显式地关闭这些文件描述符,它们将继续存在,即使父进程被脚本中的 kill 命令杀死也不会释放。

解决方式:在父进程中调用 fork() 函数生成一个子进程,然后在子进程中关闭所有文件描述符再执行 system() 命令,可以确保子进程中不会有非必要的文件描述符被继承过去。

实现代码:

void exec_system(char* command)
{pid_t pid = -1;int status = 0; pid = fork(); if(pid == -1){::exit(-1);} else if (pid == θ){//0,1,2是标准的输入输出,不关闭;关闭其他fd,在system中不继承该子进程的fd文件描述符for (int fd =·3; fd <·sysconf(_SC_OPEN_MAX); fd++)  {::close(fd);}system(command); //执行脚本::exit(0);·//·退出子进程}else {waitpid(pid,&status,0);// 等待子进程退出} 

waitpid() 函数是用来等待一个特定的子进程结束并返回子进程的状态的。在父进程中调用 fork() 函数会创建一个新的子进程,两个进程(即父进程和子进程)会同时运行。如果不等待子进程结束,父进程可能会在子进程之前结束,导致子进程成为孤儿进程或僵尸进程。这可能会导致一些问题,例如:

  • 孤儿进程:如果父进程先于子进程结束,子进程将成为孤儿进程,这意味着没有父进程来捕获它的退出状态,该子进程的进程标识符(PID)将被 1 号进程 init(或 systemd)收养,从而成为 init 进程的子进程。
  • 僵尸进程:父进程在子进程结束后不调用 wait() 或 waitpid() 函数,子进程将成为僵尸进程。这意味着子进程已经退出了,但是它的进程描述符仍然存在,并且占用一些内核数据结构。如果产生大量僵尸进程,可能会耗尽系统的资源。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1030225.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2025长沙美甲美睫培训学校TOP5权威推荐:速成班费用与优 - myqiye

当下美业市场蓬勃发展,据湖南省美容美发化妆品行业协会数据,2024年省内美甲美睫师岗位缺口超2万个,速成培训班需求激增,但行业乱象频发:超60%学员遭遇隐形消费,35%机构课程与市场潮流脱节,28%零基础学员因大班教…

5分钟用MySQL存储过程搭建业务逻辑原型

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 开发一个快速原型工具&#xff0c;允许用户&#xff1a;1. 通过自然语言描述业务逻辑&#xff1b;2. 自动生成对应的MySQL存储过程框架&#xff1b;3. 提供测试数据生成功能&#x…

基于CentOS 9的快速开发环境搭建指南

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 创建一个自动化脚本&#xff0c;用于在CentOS 9上快速配置Python和Node.js开发环境。包含常用开发工具安装、虚拟环境配置和示例项目模板。支持一键安装和配置&#xff0c;自动检测…

MySQL 中 COUNT (*) 与 COUNT (col) 区别

MySQL 中 COUNT (*) 与 COUNT (col) 区别一、功能本质:计数范围的 “天壤之别”COUNT(*)与COUNT(col)的核心差异,在于是否排除 NULL 值,这直接决定了计数结果的不同,也是后续性能差异的根源。1. COUNT (*):“不挑…

AI如何帮你快速掌握Java基础知识?

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 创建一个Java基础学习助手应用&#xff0c;包含以下功能&#xff1a;1) 交互式Java语法解释器&#xff0c;输入代码片段自动解析语法结构&#xff1b;2) 常见编程错误自动检测与修正…

CH585 CH584 CH592 RF PHY/Basic 2.4G 包格式

射频(Radio Frequency ,RF):以下是RF物理层信号的主要构成部分:RF使用2.4 GHz的ISM(工业、科学和医疗)频段。在2.4 GHz频段中,RF占用了40个频道,每个频道有2 MHz的带宽。 RF信号的结构通常由RF包(RF Packet)…

Fiddler抓包神器:AI如何帮你自动分析网络请求

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 开发一个基于Fiddler的AI辅助分析工具&#xff0c;能够&#xff1a;1. 自动识别和分类常见的API请求模式 2. 根据历史请求智能生成Mock响应数据 3. 检测异常请求和潜在安全问题 4. …

CentOS 9在企业级Web服务中的实战部署

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 开发一个在CentOS 9上部署高可用Web服务的自动化脚本。包含Nginx配置模板、MySQL优化参数和负载均衡设置。脚本应支持一键部署&#xff0c;自动检测系统资源并优化配置。使用Bash编…

2025年铝箔翅片定制厂家权威推荐榜单:铝防爆箔/亲水铝箔/铝翅片源头厂家精选 - 品牌推荐官

铝箔翅片作为现代高效换热器的核心传热元件,其性能直接决定了空调、制冷设备、工业冷却装置及新能源热管理系统的能效、可靠性与紧凑性。随着“双碳”目标下各行业对节能要求的提升以及设备小型化、轻量化的趋势,市场…

2025年内衬不锈钢复合管品牌推荐:新澎内衬不锈钢复合管质量 - mypinpai

在流体输送管道领域,内衬不锈钢复合管凭借防腐性能优+成本可控的核心优势,成为净水输送、石油化工、航空煤油等场景的优选方案。但市场产品质量参差不齐,如何选到靠谱品牌?本文围绕新澎内衬不锈钢复合管质量怎样新…

事倍功半是蠢蛋69 TODO

注释中的TODO 当代码写到一半或者任务没有完成时,在注释中添加TODO,可以让IDEA在TODO中显示未完成的部分,直接定位;

忘记密码?3分钟快速解锁密码锁的技巧

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 开发一个密码锁快速解锁指南应用&#xff0c;根据用户输入的密码锁类型&#xff08;数字、图案、指纹等&#xff09;&#xff0c;提供分步骤的图文/视频解锁教程。包含常见错误提示…

用Packet Tracer快速验证网络架构设计的3种方法

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 创建一个网络架构原型验证工具&#xff0c;基于Packet Tracer实现&#xff1a;1. 常见网络拓扑模板库 2. 配置导入/导出功能 3. AI辅助设计建议 4. 自动化测试脚本 5. 性能分析报告…

企业级Spring Boot项目中的AutoConfiguration.imports实战

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 为一个电商平台的Spring Boot项目创建自定义自动配置。首先定义3个自定义自动配置类&#xff1a;PaymentAutoConfiguration(支付)、InventoryAutoConfiguration(库存)和Recommendat…

JookDB在电商平台中的实战应用案例

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 开发一个电商平台演示系统&#xff0c;展示JookDB在以下场景的应用&#xff1a;1. 实时订单处理系统 2. 用户行为分析看板 3. 个性化推荐引擎。要求&#xff1a;使用JookDB作为主数…

《60天AI学习计划启动 | Day 38: 多会话 多 Tab 同步(前端层)》

Day 38:多会话 & 多 Tab 同步(前端层) 学习目标设计 多会话模型:当前会话 + 会话列表(标题/摘要/时间) 掌握 利用 localStorage + storage 事件 做多 Tab 状态同步 实现 简单的会话新建 / 重命名 / 归档逻辑…

传统网页存档vs互联网档案馆:效率对比分析

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 开发一个网页存档效率对比分析工具。功能&#xff1a;1. 模拟自行搭建存档系统的工作流程&#xff1b;2. 与互联网档案馆API进行对比测试&#xff1b;3. 测量并比较响应时间、存储空…

如何用AI一键生成Jupyter Notebook环境配置脚本

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 创建一个Python脚本&#xff0c;用于自动下载并配置Jupyter Notebook开发环境。要求&#xff1a;1. 自动检测系统类型&#xff08;Windows/macOS/Linux&#xff09;并执行对应安装命…

企业级Python环境部署实战 - 官方源的正确使用

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 开发一个企业级Python部署管理系统&#xff0c;功能包括&#xff1a;1)多节点批量下载Python官方安装包 2)自动校验文件完整性 3)生成部署报告 4)支持离线安装包制作 5)版本合规性检…

MySQL存储过程开发效率提升300%的秘诀

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 构建一个MySQL存储过程开发效率工具包&#xff0c;包含&#xff1a;1. 代码片段库&#xff08;常用模式一键插入&#xff09;&#xff1b;2. 实时语法检查和性能分析&#xff1b;3.…