news 2026/4/16 17:02:31

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
父子进程关系与终止机制详解

父子进程关系与终止机制

父子进程关系子进程通过fork()系统调用创建,是父进程的副本。现代Linux内核(如Ubuntu 18的Linux 5.4)采用写时复制(Copy-On-Write, COW)技术:子进程初始共享父进程的内存空间,仅当任一进程尝试修改共享数据时,内核才会为子进程分配独立的内存副本。这优化了性能,避免了不必要的内存复制。

进程终止的8种情况

  • 正常终止:
    • main()函数中执行return语句。
    • 调用C库函数exit(),会清理I/O缓冲区、关闭文件流、执行atexit()注册的函数。
    • 调用系统调用_exit(),直接终止进程但不清理缓冲区或执行atexit()函数。
    • 主线程退出或调用pthread_exit()
  • 异常终止:
    • 调用abort()触发SIGABRT信号。
    • 通过信号(如kill命令发送SIGKILL)终止进程。
    • 最后一个线程被pthread_cancel()取消。

僵尸进程与孤儿进程

僵尸进程
子进程终止后,其PCB(进程控制块)未被父进程回收(通过wait()waitpid()),导致内核资源泄漏。长期运行的父进程若频繁创建短生命周期子进程,可能导致系统资源耗尽。

孤儿进程
父进程先于子进程终止时,子进程被init进程(PID 1)接管,由init负责后续回收,无需额外处理。

进程退出函数对比

exit()_exit()

  • exit(int status)
    • 库函数,终止进程并执行清理(刷新缓冲区、调用atexit()注册的函数)。
    • 参数status传递退出状态(EXIT_SUCCESSEXIT_FAILURE)。
  • _exit(int status)
    • 系统调用,立即终止进程,不执行任何清理。
    • 适用于需要快速退出的场景(如子进程异常处理)。

执行顺序
exit()→ 刷新缓冲区 → 执行atexit()注册函数 → 调用_exit()

进程资源回收

wait()函数

pid_t wait(int *status);
  • 阻塞等待任意子进程退出,并回收其资源。
  • status参数存储子进程退出状态,可通过宏解析:
    • WIFEXITED(status):判断是否正常退出。
    • WEXITSTATUS(status):获取正常退出的返回值。
    • WIFSIGNALED(status):判断是否因信号终止。
    • WTERMSIG(status):获取终止信号的编号。

示例代码

int status; pid_t pid = wait(&status); if (WIFEXITED(status)) { printf("Child exited with status %d\n", WEXITSTATUS(status)); } else if (WIFSIGNALED(status)) { printf("Child killed by signal %d\n", WTERMSIG(status)); }

关键注意事项

  • 长期运行的父进程必须主动回收子进程,避免僵尸进程累积。
  • exit()_exit()的选择需根据清理需求决定。
  • 信号处理中若需立即终止进程,优先使用_exit()以避免缓冲区操作未完成的问题。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/16 12:31:42

SpringCould —— 网关详解

一、前言在讲网关之前,我们需要先自行拆分黑马商城的其他模块,比如用户微服务、交易微服务、支付微服务。然后就会发现一个问题,我们在前面的确是可以使用不同端口号对各个微服务进行单一访问的,并且可以用测试文档去测试&#xf…

作者头像 李华
网站建设 2026/4/16 1:39:18

WebLLM硬件加速终极指南:从零解决WebGPU兼容性问题

WebLLM硬件加速终极指南:从零解决WebGPU兼容性问题 【免费下载链接】web-llm 将大型语言模型和聊天功能引入网络浏览器。所有内容都在浏览器内部运行,无需服务器支持。 项目地址: https://gitcode.com/GitHub_Trending/we/web-llm 你是否曾经满怀…

作者头像 李华
网站建设 2026/4/16 13:30:27

如何优雅的应对屎山代码[特殊字符]

你眼中的 “烂代码”,或许曾支撑过公司的核心业务,甚至藏着你不知道的 “隐形坑”,就像是《左耳》里面写的:“前任也曾是爱的人”。 核心:职场不是 “写漂亮代码的乌托邦”,而是 “解决问题的修罗场”。 如…

作者头像 李华
网站建设 2026/4/10 22:18:13

基于Spring Boot+Vue的档案数字化项目管理系统

目录 项目介绍 演示视频 系统展示 代码实现 推荐项目 项目开发总结 为什么选择我 源码获取 博主介绍:✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领…

作者头像 李华
网站建设 2026/4/16 14:36:23

vue基于Spring Boot框架的宠物收养志愿者管理系统的设计与实现_0mp970vp

目录具体实现截图项目介绍论文大纲核心代码部分展示项目运行指导结论源码获取详细视频演示 :文章底部获取博主联系方式!同行可合作具体实现截图 本系统(程序源码数据库调试部署讲解)同时还支持java、ThinkPHP、Node.js、Spring B…

作者头像 李华
网站建设 2026/4/15 18:20:21

顶与底判断顶底 通达信指标 源码分享

{}VAR2:LLV(LOW,10); VAR3:HHV(HIGH,25); 我:3.5,COLOR0088FF; 清仓: 3.5,COLORYELLOW,LINETHICK3; 减仓: 3.2,COLORBLUE; 动力线: EMA((CLOSE-VAR2)/(VAR3-VAR2)*4,4); 强弱线:1.75,LINETHICK1,COLORGREEN; 关注:0.5,COLORBLUE ; {} 数值:动力线,COLORA8A8A8; DRAWBAND(减仓,R…

作者头像 李华