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

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

固件升级流程,升级软件向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.zskr.cn/news/114999.html

相关文章:

  • 5分钟用MySQL存储过程搭建业务逻辑原型
  • 基于CentOS 9的快速开发环境搭建指南
  • MySQL 中 COUNT (*) 与 COUNT (col) 区别
  • 企业级Spring Boot项目中的AutoConfiguration.imports实战
  • JookDB在电商平台中的实战应用案例
  • 《60天AI学习计划启动 | Day 38: 多会话 多 Tab 同步(前端层)》
  • 传统网页存档vs互联网档案馆:效率对比分析
  • 企业级Python环境部署实战 - 官方源的正确使用
  • Promise.js在电商网站支付流程中的实战应用
  • 2025年年终伺服压机推荐:从技术参数到服务生态的全方位横评,附5款高适配性型号清单 - 品牌推荐
  • torch.where vs numpy.where:性能对比全解析
  • 效率翻倍:一键切换工作/娱乐分辨率方案
  • 2025年无人机探测设备制造企业权威推荐榜单:无人机反制模块/无人机侦测反制设备/无人机管制设备源头厂家精选 - 品牌推荐官
  • 1小时搞定:用await快速开发天气查询CLI工具
  • LobeChat节日营销专题页内容策划
  • 2025年沥青搅拌设备源头厂家权威推荐榜单:沥青搅拌站/温拌泡沫沥青设备/沥青混凝土搅拌站源头厂家精选 - 品牌推荐官
  • 低成本打造专属声优!EmotiVoice声音克隆实测分享
  • 2025年12月电线/防火/控制电缆厂家推荐指南:五家企业实力铸就品质之选 - 深度智识库
  • 2025年高精度大理石量具品牌推荐:大理石量具角尺靠谱厂商有 - mypinpai
  • 50、Perl函数详解:MRO、多调用、数值及兼容性函数
  • 企业级Maven项目部署问题实战解析
  • GB/T 40363-2021 硬质聚氨酯泡沫塑料检测
  • 解决mapper.xml中SQL语句不提示的问题
  • 打破语音合成单调性:EmotiVoice带来情绪多样性
  • 效率对比:传统排查vsAI解决Yarn问题耗时实验
  • 语音合成个性化设置:保存常用音色模板功能
  • ESP32 FreeRTOS任务管理大全:概念、实现、优化与调试的一站式学习手册
  • 2025AAAI-DivShift: Exploring Domain-Specific Distribution Shift in Large-Scale, Volunteer-Collected
  • 信息系统项目管理师论文考情分析及评分标准
  • 创业者必看!深圳注册代办公司靠谱之选-权威盘点