news 2026/6/1 16:08:19

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

作者头像

张小明

前端开发工程师

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/5/31 23:28:27

Open-AutoGLM 实战:手把手教你用 AI 做App自动化测试「喂饭教程」

Open-AutoGLM 实战:手把手教你用 AI 做App自动化测试「喂饭教程」前言开始之前的几点说明准备工作第一步:Python 环境第二步:安装 ADB 工具第三步:准备你的 Android 手机快速部署:10 分钟搞定克隆项目到本地创建独立的…

作者头像 李华
网站建设 2026/6/1 22:11:53

存储引擎内核:深入解析 LSM-Tree 原理与高吞吐写入实践

【精选优质专栏推荐】 《AI 技术前沿》 —— 紧跟 AI 最新趋势与应用《网络安全新手快速入门(附漏洞挖掘案例)》 —— 零基础安全入门必看《BurpSuite 入门教程(附实战图文)》 —— 渗透测试必备工具详解《网安渗透工具使用教程(全)》 —— 一站式工具手册《CTF 新手入门实战教…

作者头像 李华
网站建设 2026/5/30 14:41:49

保姆级教程:iPhone 某人短信消失?9 种解决方法,小白也会用

当某个联系人的短信突然从你的 iPhone 上消失时,你会感到很沮丧。你知道你没有删除它们,但整个对话却神秘地消失了。你并不孤单。许多 iPhone 用户在论坛上都报告了这个问题。无论是 iOS 故障、同步问题还是意外删除,本文都会从各个角度进行分…

作者头像 李华
网站建设 2026/5/29 20:44:55

31、进程间通信:信号、管道与套接字详解

进程间通信:信号、管道与套接字详解 1. 信号设置与处理 信号是进程间通信的重要方式之一,在处理信号时,我们可以设置不同的信号行为。以下是信号行为设置的相关模式: | 操作 | System V 模式 | POSIX 模式 | | — | — | — | | 忽略信号 | sigaction(signo,new,old) …

作者头像 李华
网站建设 2026/6/1 23:21:24

C语言归并排序

归并排序 归并排序——最常见的分治排序算法;把两个已经有序的数组合并成一个有序数组 一、归并排序思路 分:递归地把当前区间 [left, right] 一分为二,直到区间长度 ≤1。治:把两个已经有序的子区间合并成一个有序区间。合并时需…

作者头像 李华
网站建设 2026/6/1 13:23:57

java计算机毕业设计社区疫情防控管理系统 街区居民防疫信息综合平台 基层社区疫情联防联控小程序

计算机毕业设计社区疫情防控管理系统orcuw9(配套有源码 程序 mysql数据库 论文) 本套源码可以在文本联xi,先看具体系统功能演示视频领取,可分享源码参考。疫情反复期间,社区卡口纸质登记、微信群接龙、人工电话追核酸造成数据碎片…

作者头像 李华