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

相关推荐
鸠摩智首席音效师11 小时前
如何安装和配置 Nginx 反向代理服务器 ?
运维·nginx
ayaya_mana12 小时前
VS Code 远程开发:SSH连接与远程资源管理器的配置
linux·ide·windows·vscode·远程资源管理
choumin12 小时前
在 Debian 上安装并运行 PoCL
linux·编译·安装·pocl
又是忙碌的一天13 小时前
SpringMVC响应
java·服务器·数据库
Shanxun Liao13 小时前
CentOS 7.9 根分区 / 已经 100% 用满隐藏占用解决办法
linux·运维·centos
FOREVER-Q13 小时前
Windows 下通过 SSH 替代 Gitee OAuth Token 推送配置指南
运维·服务器
Cyber4K13 小时前
【Kubernetes专项】DockerFile、数据持计划、网络模式及资源配额
运维·网络·云原生·容器·kubernetes
学好statistics和DS13 小时前
命令替换(Command Substitution)详解
linux
zimoyin13 小时前
浅浅了解下0拷贝技术
java·linux·开发语言
ba_pi13 小时前
每天写点什么2026-01-09-linux基础
linux·运维·服务器