Linux--进程终止

1.进程退出场景

进程退出场景只有三种:

  • 代码运行完毕,结果正确
  • 代码运行完毕,结果错误
  • 代码在运行期间异常中断,退出进程

比如:对于错误的进程,可以通过不同的返回值来确定,什么是错误码呢?

错误码就是进程退出之后返回的那个数字,可以通过指令 echo $? 来查看,所以,对于main函数的返回值,本质表示:进程结束之后是否正确的结果,如果不正确,可以用不同的数字,来表示不同的结果,所代表的出错原因。

查看错误码有多少个:

结果:

从134行之后就是未知错误,所以退出码一共有134个,从0到133,0表示代码运行结束,结果正确。

2.退出码的意义

2.1为什么会有退出码呢?

进程的退出码,代表的是进程的结果的是否正确。也即0------->success.

但是,谁会关心运行的结果是否正确呢,一般而言为父进程关心结果是否正确,因为如果代码出现进程退出,结果不正确,可以用不同的数字来表示不同的错误情况,比如:

这种情况导致的栈溢出。所以,退出码对于父进程是重要的。系统提出的错误码和错误码描述是有关系的。当然,我没自己也可以设计一套错误码,以供自己使用。

2.2 进程异常退出问题

进程异常退出之后,退出码还有作用吗?

答案当然是没有作用的,因为进程出现异常之后,代码没有运行完成,也就是没有都到return语句这里,在return 语句之前退出的,这样就导致了退出码异常,退出码没有发挥作用。进程的退出码是没有意义的。

2.3 进程结束判断

进程退出之后,我们需要判断是否是进程异常退出,还是正常退出,如果是异常退出,则不需要关心退出码,正常退出,则关心退出码。

3.exit和_exit的区别

先看代码:

结果是两个都相同,但是改变代码之后:

结果是:

_exit的结果啥也没有,exit打印出了结果

出现这种情况的原因是:exit是语言级的接口函数,而_exit为系统级的接口函数,虽然exit最后也是调用_exit,但是exit在调用_exit之前做过:

  1. 执行用户通过 atexit或on_exit定义的清理函数。

  2. 关闭所有打开的流,所有的缓存数据均被写入 。

  3. 调用_exit。

所以正常的程序在调用exit时,先将数据写入缓冲区,在合适的时候再打印,而_exit则是直接杀死进程,啥也不干。

相关推荐
运维大师2 分钟前
【K8S 运维实战】37-金融企业多集群落地
运维·金融·kubernetes
米修米修ne4 分钟前
Home Assistant连接米家MIoT和苹果HomeKit折腾笔记
服务器·智能家居
行者-全栈开发42 分钟前
【Linux内核】CVE-2026-46242:Bad Epoll Linux 内核 epoll UAF 漏洞修复指南(99%可靠root的云安全噩梦)
linux·运维·服务器·cve-2026-46242·linux内核漏洞·use-after-free·云多租户安全
平安的平安43 分钟前
人在外地,怎样访问办公室里的电脑和内部资源?
运维·服务器·电脑
智体工坊1 小时前
从零搭建 AI 模型中转网关:部署、渠道、定价、装修全记录
运维·服务器·人工智能·搜索引擎·自动化
我命由我123451 小时前
Kotlin 面向对象 - Kotlin 类变量与类方法
java·服务器·后端·java-ee·kotlin·android jetpack·android runtime
信鸽爱好者1 小时前
一人多台电脑办公模式:windows 电脑A远程桌面操作ubuntu电脑B
linux·运维·ubuntu
木由里予1 小时前
TEE(Trusted Execution Environment)技术详解
java·linux·开发语言·网络·嵌入式硬件·android-studio
元岳数字人小元1 小时前
易部署易运维!AI数字人一体机实现场景长效运营
运维·人工智能·人机交互·交互·源代码管理
小比特-combat1 小时前
FreeRTOS任务通知
java·服务器·前端