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

进程的终止

一,什么是父子进程

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

从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)如果是信号终止的,那么是几号信号。
http://www.cnnetsun.cn/news/70634.html

相关文章:

  • 一口气解释清楚转换流存在的原因
  • 从卧床不起到健步如飞 退休老阿姨用机器人治腰突的亲身体验!
  • Java毕设项目:基于springboot新能源汽车销售管理系统基于Java Web的新能源汽车信息咨询服务(源码+文档,讲解、调试运行,定制等)
  • Java毕设项目:基于springboot高校体育运动会比赛系统(源码+文档,讲解、调试运行,定制等)
  • uos server 1070e在线软件仓库源整理记录
  • 谷歌镜像站同步更新:Qwen-Image全球加速访问
  • 使用Docker Compose快速部署FLUX.1-dev镜像的5个步骤
  • 腾讯混元HunyuanVideo-Foley模型上线GitHub,开启音画同步新纪元
  • npm publish发布基于Qwen-Image的封装库到公共仓库
  • 冥想第一千七百三十二天(1732)
  • 冥想第一千七百三十三天(1733)
  • Qwen3-8B vs 其他8B模型:开源大模型性能对比实测
  • java计算机毕业设计生活用品供应管理系统的设计与实现 基于SpringBoot的社区日用品采购平台的设计与实现 面向校园的日用杂货线上供应系统的设计与实现
  • 干货!大数据数据增强的实际应用技巧
  • 大数据领域中Power BI与其他工具的对比分析
  • ensp下载官网被屏蔽?国内镜像站提供备份资源
  • 付费墙绕过技术深度解析:Bypass Paywalls Clean实现原理与应用指南
  • 小米运动步数自动同步工具:2025年免费刷步数完整教程
  • Ubuntu安装GNOME桌面增强PyTorch开发体验
  • gpt-oss-20b能否用于文本摘要任务?实测效果报告
  • 3步搞定!网易云NCM音乐格式转换全攻略
  • Flutter 跨端开发进阶:可复用自定义组件封装与多端适配实战(移动端 + Web + 桌面端)
  • Qwen3-VL-30B在金融报表图表解析中的精准度表现测试
  • Ruby CGI 编程
  • 【直接抄作业】2025 网安工程师入门到精通:零基础全流程(收藏即够用)
  • 8个降AI率工具推荐,本科生开题报告必备
  • C++ 程序流程结构-循环结构-for循环
  • BOE(京东方)发布智能体集群 多智能体协同重塑AI+显示新未来
  • 国产POE降压恒压芯片方案选型:48v-52v输入转5v-12v/1-3A电源芯片
  • 9个研究生论文写作工具,AI工具推荐解决发表难题!