当前位置: 首页 > 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.jsqmd.com/news/104176/

相关文章:

  • AI如何自动清理Windows系统垃圾文件
  • 2025长沙美甲美睫培训学校TOP5权威推荐:速成班费用与优 - myqiye
  • 基于CentOS 9的快速开发环境搭建指南
  • CentOS 9在企业级Web服务中的实战部署
  • 2025年铝箔翅片定制厂家权威推荐榜单:铝防爆箔/亲水铝箔/铝翅片源头厂家精选 - 品牌推荐官
  • 2025年内衬不锈钢复合管品牌推荐:新澎内衬不锈钢复合管质量 - mypinpai
  • 事倍功半是蠢蛋69 TODO
  • 用Packet Tracer快速验证网络架构设计的3种方法
  • 企业级Spring Boot项目中的AutoConfiguration.imports实战
  • JookDB在电商平台中的实战应用案例
  • 《60天AI学习计划启动 | Day 38: 多会话 多 Tab 同步(前端层)》
  • 传统网页存档vs互联网档案馆:效率对比分析
  • 如何用AI一键生成Jupyter Notebook环境配置脚本
  • 企业级Python环境部署实战 - 官方源的正确使用
  • CMHHP实战:构建智能慢性病管理系统
  • 3步快速解决Windows安装配置错误
  • Promise.js在电商网站支付流程中的实战应用
  • 2025年年终伺服压机推荐:从技术参数到服务生态的全方位横评,附5款高适配性型号清单 - 品牌推荐
  • 工程优化- Tenacity库用于重试机制及使用示例
  • AI如何解决PDF预览难题?快马平台一键生成解决方案
  • torch.where vs numpy.where:性能对比全解析
  • 传统VS现代:EasyPlayer开发效率提升300%的秘密
  • EmotiVoice与语音唤醒技术结合的智能家居场景设想
  • 效率翻倍:一键切换工作/娱乐分辨率方案
  • 2025年无人机探测设备制造企业权威推荐榜单:无人机反制模块/无人机侦测反制设备/无人机管制设备源头厂家精选 - 品牌推荐官
  • 1小时搞定:用await快速开发天气查询CLI工具
  • LobeChat节日营销专题页内容策划
  • 再次提醒下本周六日参加考研的人!
  • AI写论文的软件有哪些?实测11款AI论文工具,AI效率与低AI率兼得! - 掌桥科研-AI论文写作
  • 告别传统测速:AI如何将网络诊断效率提升10倍