《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:

相关推荐
XH-hui7 小时前
【打靶日记】TheHackerLabs 之 THLPWN
linux·网络安全·thehackerlabs·thl
我是小超人-雨石花10 小时前
Jenkins&Robot Framework持续集成
运维·jenkins·ci
wanhengidc12 小时前
云手机的软件核心是什么
运维·服务器·web安全·游戏·智能手机
芬加达13 小时前
jvm八股
运维·服务器·jvm
小兔薯了13 小时前
11. Linux firewall 防火墙管理
linux·运维·服务器
Linux技术芯13 小时前
浅谈SCSI寻址机制与工作阶段深度解析?
linux
ink@re14 小时前
Docker环境搭建与容器管理实战:从部署到编排的完整指南
运维·docker·容器
RPA机器人就选八爪鱼15 小时前
RPA财务机器人:驱动财务数字化转型的核心引擎
大数据·运维·人工智能·机器人·rpa
☼←安于亥时→❦15 小时前
Linux 系统日志‘/var/log/syslog‘ 和 ‘/var/log/messages‘ 详解
linux
袁气满满~_~15 小时前
Ubuntu下配置PyTorch
linux·pytorch·ubuntu