《Linux篇》进程控制——进程创建(写时拷贝)、进程终止(退出码,exit,_exit)

文章目录

1.进程创建

之前我们已经学了使用fork来创建进程,现在我们主要谈的是写时拷贝!!!

因此有写时拷⻉技术的存在,所以⽗⼦进程得以彻底分离离!完成了进程独立性的技术保证!写时拷⻉,是⼀种延时申请技术,可以提⾼整机内存的使⽤率。

当然fork也有可能会创建失败:①系统中进程太多②用户的实际进程超过了限制(对用户有限制)

2.进程终止

当进程终止时,操作系统要做些什么呢?我们main函数退出时我们都会写个return 0,为什么要写,是给谁返回的呢?

我们把return 0叫做进程退出的退出码,未来系统会获得这个return 0退出码,用来让系统辨别该进程的执行情况。

我们将上面的代码改成return 10看看情况:

?会记录最近一个进程执行完的退出码,$?是取出该数值。echo也是一个命令,退出码为0表示运行成功。

Q:为什么要有退出码?

A:子进程把父进程交给自己的任务,办的怎么样,父进程是需要知道的,就是通过看退出码来看:0表示成功了,非0表示没有成功,1,2,3...表明不同的失败原因。

Linux Shell 中的主要退出码:

C语言给我们提供了一些内置的错误原因函数:

strerror

在进程的PCB中会有个属性exit_code保存这个退出码的信息。

如下我们正式来谈进程终止。

进程退出,无非就是三种情况:①代码跑完,结果对②代码跑完,结果不对③代码没跑完,进程异常。现在我们主要处理前两种情况,代码跑完了,结果对不对由退出码来决定。代码异常了,退出码没有意义。当进程异常了,信号需要知道,管理者OS一定会知道,一般都是杀掉这个进程,用信号来杀掉进程:kill -9 XXX

Q:那么退出码从哪里获取呢?

A:方法一:main函数进行return n,n表示的就是退出码;方法二:直接调用exit(n),exit的参数n等同于return的返回值,表示退出码;方法三:系统调用,直接调用_exit(n)

Q1:return和exit方式有什么区别

A1:return通常表示函数调用结束,main函数比较特殊,return表示进程退出;exit表示的是进程结束,在我们的代码里面,任何地方调用,都会导致进程退出。

Q2:exit和_exit方式有什么区别

A2:exit是C语言库函数,_exit是系统调用,exit终止进程会自动刷新缓冲区,_exit直接终止进程不会刷新缓冲区。而return也会在进程结束时,也会刷新缓冲区。(与exit一样)

补充:进程终止必定要调用系统调用,必须要让操作系统完整真正的让进程删除退出。库函数和系统调用是上下层关系,exit只是在底层封装了_exit,这样才能完成真正的进程终止。

Q:那么输出缓冲区应该在哪里呢?

A:

相关推荐
一可米15 分钟前
gitHub.com Actions自动化发布
运维·自动化·github
智塑未来1 小时前
证券公司智能运维平台哪个品牌做得好?擎创科技智能运维 2.0 适配券商全场景
运维·科技·区块链
2601_965798471 小时前
Is Hygia Good for Maid & Janitorial Sites? Technical Audit
服务器·网络·数据库
蚰蜒螟1 小时前
从内核源码看Linux启动:chroot、execve与MS_MOVE的协奏曲
linux·服务器·网络
影视飓风TIM2 小时前
Linux下C语言缓冲区原理 + Git版本控制
linux·c语言·git
来者皆善3 小时前
ZYNQ linux上使用 USB CDC ACM
linux·运维·服务器
4/5$全真龙门3 小时前
廉价易行的内网穿透
运维
缓慢更新3 小时前
企业档案管理系统迁移实录:从文件服务器到智能检索引擎
运维·服务器
小北的AI科技分享4 小时前
企业AI开发:从技术选型到落地的关键路径
运维·模型·评估
Dawn-bit4 小时前
Linux磁盘分区与Swap和磁盘故障查询
linux·运维·服务器·网络·云计算