news 2026/5/1 11:32:36

进程的终止

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
进程的终止

一,什么是父子进程

子进程是父进程的一个复制品(副本)。

从linux 2.6 之后 (ubuntu 18 linux 5.4)子进程在复制父进程内存空间的时候,执行写时复制。

刚fork完毕,子进程使用的内存空间全部都是父进程的(子进程共享父进程所以的空间)。随着

时间的推移,父子进程对某个变量或内存区域进行修改,这个时候,子进程才会开辟对应内存空

间。这个技术就是写时复制。

二,进程的终止

以下八种情况时,进程会终止:

1.main函数中程序运行到return;

2.exit(), c库函数,会执行io库的清理工作,关闭所有 的流,以及所有打开的文件。已经清理函

数;

3._exit,_Exit 会关闭所有的已经打开的文件,不执行清理函数;

4.主线程退出;

5.主线程调用pthread_exit;

程序异常终止时:

6.abort();

7.signal kill pid;

8.最后一个线程被pthread_cancle;

三,退出后的进程

1.僵尸进程 ,父进程创建子进程后,子进程先消亡。对应用户内存空间释放,子进程也不会被调度

了。但是内核空间中的对应的pcb块,没有释放。

2.孤儿进程,父进程创建子进程后,父进程先消亡。子进程会寻找新的父进程。孤儿进程不用过多

关注。因为,他的回收问题,由新的父进程回收。

退出函数

1.exit 库函数 退出状态,终止的进程会通知父进程,自己使如何终止的。如果是正常结束(终止),则由exit传入的 参数。如果是异常终止,则有内核通知异常终止原因的状态。任何情况下,负进程都能使用wait,waitpid获 得这个状态,以及资源的回收。 void exit(int status) exit(1); 功能: 让进程退出,并刷新缓存区 参数: status:进程退出的状态 返回值: 缺省 参数可选值 EXIT_SUCCESS 0 EXIT_FAILURE 1 return 当该关键字出现在main函数中时候可以结束进程 如果在其他函数中则表示结束该函数。 exit -> 刷新缓存区 -> atexit注册的退出函数 -> _exit 2._exit 系统调用 void _exit(int status); 功能: 让进程退出,不刷新缓存区 参数: status:进程退出状态 返回值: 缺省

四,进程空间的回收

因为子进程退出后,对应的pcb 没有释放。导致子进程并没有完全退出。如果父进程是一个需

要长期运行,并需要多次创建子进程(运行时长相对都比父的短)的进程,那么时间一长,linux内核

空间就会有大量的僵尸进程的pcb ,会导致linux 内核内存空间不足。系统就不稳定或崩溃。

可以使用ps 或top 查看

pid_t wait(int *status); 功能:该函数可以阻塞等待任意子进程退出 并回收该进程的状态。 只能父进程回收子进程状态。 参数:status 进程退出时候的状态 如果不关心其退出状态一般用NULL表示 如果要回收进程退出状态,则用WEXITSTATUS回收。 返回值:成功 回收的子进程pid 失败 -1; WIFEXITED(status) 是不是正常结束 WEXITSTATUS(status) 使用这个宏去那返回值 WIFSIGNALED(status) 是不是收到了信号而终止的 WTERMSIG(status)如果是信号终止的,那么是几号信号。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/1 10:29:26

ACE-Step扩散模型架构解析:如何实现高效音乐生成与编曲控制

ACE-Step扩散模型架构解析:如何实现高效音乐生成与编曲控制 在AI正悄然重塑创意边界的今天,音乐创作不再是少数人的专属技艺。随着短视频、游戏和影视内容的爆炸式增长,市场对高质量背景音乐的需求前所未有地旺盛——但专业作曲成本高、周期长…

作者头像 李华
网站建设 2026/5/1 9:26:19

高并发系统代码审计规范文档

适用于:区块链支付系统、高并发交易处理、分布式锁、消息队列消费及异步任务系统 一、文档目的 统一团队对区块链支付系统高并发代码审计流程 明确审计范围、重点和方法 提高发现高并发风险、锁竞争、幂等、异常处理问题的效率 确保交易安全性与一致性,降低潜在资金风险 二、…

作者头像 李华
网站建设 2026/4/27 23:25:48

Soluling:专业自动化本地化工具,支持多格式软件文档翻译适配

Soluling是一款功能强大的专业本地化工具,专注于软件、文档及数据的多语言适配工作。该工具通过自动化流程大幅提升本地化效率,支持100多种文件格式,为开发团队和翻译专业人员提供了完整的本地化解决方案。 获取地址:https://pan…

作者头像 李华
网站建设 2026/5/1 8:09:45

Ubuntu安装Miniconda后如何正确配置CUDA与cuDNN?

Ubuntu安装Miniconda后如何正确配置CUDA与cuDNN? 在深度学习项目开发中,最令人头疼的往往不是模型设计本身,而是环境搭建——尤其是当你的PyTorch代码在别人机器上跑不起来,只因为“他的CUDA版本不对”时。这种问题背后&#xff0…

作者头像 李华
网站建设 2026/5/1 11:27:30

1小时开发:用快马平台创建VSCode小说插件原型

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 使用快马平台快速生成一个VSCode小说插件原型,包含基础功能:1.文本文件阅读器 2.章节跳转 3.阅读进度保存 4.简单搜索功能。要求:生成完整可运行…

作者头像 李华
网站建设 2026/5/1 8:10:56

零基础教程:5分钟学会创建DLL Escort许可证系统

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 创建一个极简的DLL Escort许可证验证示例,要求:1. 使用C#控制台程序;2. 包含最简单的密钥生成(如固定字符串)&#xff1b…

作者头像 李华