新闻详情

新闻详情

首页 / 资讯中心 / 详情

【进程控制】-2-进程终止

发布时间:2026/9/28 4:50:43来源:尧图网络
【进程控制】-2-进程终止
** 博主名称**迷途之人不知返 个人专栏: 《C语言》、《数据结构》、《C》、《Linux》️ Gitee仓库: 《C语言》、《数据结构》、《C》、《Linux》/ 算法专栏: 《算法精选集》进程终止1、概述2、正常退出的情况3、异常退出的情况4、总结5、如何进行进程的正常退出1、概述进程的终止本质上就是操作系统中少了一个进程。进程终止通常有三种情况代码执行完毕计算结果正确代码执行完毕计算结果不正确代码未执行完发生异常。2、正常退出的情况无论计算结果正确与否只要进程的代码执行完毕都算正常退出。以前我们每写一个 C / C 程序最后都要加一个return 0语句那么问题来了return返回的数值到底代表什么呢#includestdio.hintmain(){// ...return0;// 到底代表什么呢}实际上main函数的返回值代表进程的退出码。进程的退出码表示进程执行结果的正确与否。退出码是给父进程看的因为父进程需要知道子进程把任务执行得怎么样。在众多退出码中0表示任务执行成功非0表示失败(运算结果错误)。我们可以借助内置函数strerror将错误码转化为错误信息那么就可以打印看看常见的错误码及对应错误信息#includestdio.h#includestring.hintmain(){inti0;for(;i256;i)printf(%d: %s\n,i,strerror(i));return0;}小贴士1我们可以使用echo $?指令查看最近一个进程退出的退出码。当然echo $?本身的执行也需要创建进程而这个进程一般都是正常结束的。所以连续使用两次echo $?的时候第二次的结果一定是0。3、异常退出的情况进程运行时遇到了某种错误操作系统发现后就发送信号终止进程进程接收信号后就异常退出了。还记得吗一般有这些信号0号信号并没有标明信息是什么因为0号信号代表没有异常。这里有一个有意思的现象是我们对于一个一般的死循环进程发送9号信号可以直接终止进程进程在遇到“除0”操作时也会发生异常系统就会向进程发送8号信号我们就可以给一般的死循环进程发送8号终止信号看看会发生什么至此我们就通过给进程发送8号终止信号模拟出了“除0”错误情况下的进程终止4、总结要衡量一个进程的运行结果是否可靠我们需要观察以下两个数字退出码(exit code)退出信号(signal number)所以我们可以对进程终止的三个结果进行翻译代码执行完毕运算结果正确signal_number 0, exit_code 0代码执行完毕运算结果不正确signal_number 0, exit_code ! 0代码未执行完发生异常signal_number ! 0细节一如果一个进程的退出信号不为0即异常退出那么这个进程的退出码还有意义吗答案是没有。细节二进程的退出码和退出信号保存在哪当然是在进程PCB里头5、如何进行进程的正常退出(异常退出我们就不研究了毕竟谁会想认真研究怎么写BUG)进程的退出一般有两种方法main函数中的return语句调用exit()或_exit()。进程若要通过return语句完成自我的终止就必须在main函数中执行return语句。否则进程在除main的其它任何函数执行return都只是退出当前函数的调用而不是终止进程。这就不太方便。然而exit()在代码的任意地方都能终止进程。进程使用exit()退出退出码正是传入exit()中的参数status。#includestdio.h#includeunistd.h#includestdlib.hintmain(){while(1){printf(Im a process. pid: %d, ppid: %d\n,getpid(),getppid());exit(5);}}当然_exit()也能像exit()一样实现上面的操作。但是exit和_exit亦有区别1、概念的定位不同_exit是下层的系统调用而exit则是上层的库函数。实际上exit也将_exit封装进了exit本身的实现中。2、刷不刷新缓冲区对于_exit我们去掉\n执行看看#includestdio.h#includeunistd.h#includestdlib.hintmain(){while(1){printf(Im a process. pid: %d, ppid: %d,getpid(),getppid());_exit(5);}}打印信息没有出现进程结束的时候exit会冲刷缓冲区而_exit不会冲刷缓冲区。而exit是库函数_exit是系统调用。这就意味着缓冲区一定不是操作系统提供的所以操作系统就对缓冲区不可见。实际上缓冲区在“库”当中。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

STM32与迪文屏协同:智能温湿度控制面板的嵌入式开发全解析 2026/9/28 5:56:44

STM32与迪文屏协同:智能温湿度控制面板的嵌入式开发全解析

先把这个项目做了什么说清楚:它是一块7英寸左右的迪文串口屏,配上STM32主控板,再加一个温湿度传感器,做成了能实时显示环境数据、带历史曲线、能手动/自动控制继电器通断的面板。屏幕上的“温度”“湿度”数字不是屏幕自己编的&am…

阅读更多 →
WordPress突然全站404排查指南:新手建站哪家靠谱看这里 2026/9/28 5:56:44

WordPress突然全站404排查指南:新手建站哪家靠谱看这里

WordPress突然全站404排查指南:新手建站哪家靠谱看这里 自己不会代码,想做个网站展示业务,结果网站突然打不开,显示404?这种绝望感,河北不少做实体生意、开网店的朋友都经历过。别慌,这通常不是网站“死”了,而是配置出了岔子。…

阅读更多 →
联想Tab M10 FHD PLUS刷机全攻略:解锁Bootloader、TWRP与Magisk Root避坑指南 2026/9/28 5:56:44

联想Tab M10 FHD PLUS刷机全攻略:解锁Bootloader、TWRP与Magisk Root避坑指南

手里这台联想Tab M10 FHD PLUS用了两年多,日常看视频倒还行,但系统里预装的应用越来越多,后台一多就卡得让人冒火。想刷个干净点的类原生系统,又想把系统广告和没卵用的预装软件干掉。折腾刷机这事我前前后后花了两个周末才完全跑…

阅读更多 →
轻量级跨摄像头行人跟踪实战:YOLOv5+OSNet+拓扑匹配 2026/9/28 5:56:43

轻量级跨摄像头行人跟踪实战:YOLOv5+OSNet+拓扑匹配

简介:本资源是一套面向计算机视觉初学者与进阶开发者的跨摄像头行人跟踪实战项目,聚焦监控、智能交通等场景下的多视角行人连续追踪难题。项目完整实现从行人检测、特征提取、跨域重识别(ReID)到多目标轨迹关联的全流程&#xff0…

阅读更多 →
STM32+迪文屏DGUS打造智能家居温湿度控制面板 2026/9/28 5:56:37

STM32+迪文屏DGUS打造智能家居温湿度控制面板

去年给家里做智能家居改造时,一直困扰我的不是传感器选型,也不是继电器驱动,而是“人机交互”这一块。手机App控制当然方便,但每次开关灯、看数据都要掏手机解锁打开App,时间一长就觉得很繁琐。后来接触到迪文屏和DGUS…

阅读更多 →
SSM在线教育系统实战:从课程设计到毕业设计的Java Web完整方案 2026/9/28 5:56:37

SSM在线教育系统实战:从课程设计到毕业设计的Java Web完整方案

1. 项目定位与技术选型拆解1.1 这是一个什么项目“ssm基于的青春追梦在线教育系统mv59t”这个名字看着像课程设计或者毕业设计的选题,但它本身的定位非常清晰:一个基于SSM框架的在线教育平台。说白了,就是把线下的培训机构、课堂教学场景搬到…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉