【Linux进程管理】进程退出的几种方法

进程退出

当一个进程退出后,操作系统会释放掉这个进程的资源。包括这个进程分配的内存,打开的文件等等。所以进程退出后,不会出现内存泄漏的情况,进程一旦退出,所占的整个虚拟内存都被销毁,所有内存资源都会被系统回收

函数 描述
exit 执行完整的C库终止过程,终止进程,并向主机环境提供状态代码
_Exit 执行最少的C库终止过程,终止进程,并向主机环境提供状态代码
_exit 执行最少的C库终止过程,终止进程,并向主机环境提供状态代码
quick_exit 执行快速的C库终止过程,终止进程,并向主机环境提供状态代码
_cexit 执行完整的C库终止过程并返回给调用方。不终止进程
abort 只终止进程,不释放进程所占用资源,并抛出abort异常log

exit函数

函数原型

#include <stdlib.h>

void exit(int status);

函数作用

在调用后让进程正常退出;并且在进程退出时会刷新缓冲区数据

函数形参

status:进程退出时的状态值,即在使用时给它一个无符号的整数型,该数将作为进程的退出状态,0表示成功,其他值都表示失败;并且要在0-255范围内,否则将自动默认为未定义退出状态值。

linux提供$?特殊变量来保存最后一条命令执行结束的退出状态。执行完一条命令后,立即执行$?来获取最后一条命令的退出状态值

[Ubtuntu ~]$ echo $?
8

_exit()

函数原型

#include <unistd.h>

void _exit(int status);

函数作用

使用此函数将立即终止一个进程,并把它的状态值返回。由于进程是非正常结束;所以当进程死亡时,会通知父进程发出一个信号, SIGCHLD信号将告知系统回收该进程的资源;并且退出时不刷新缓冲区,若有打开的文件也不会进行关闭操作;所以可能会造成数据丢失。

函数形参

status:进程退出时的状态值,即在使用时给它一个无符号的整数型,该数将作为进程的退出状态;并且要在0-255范围内,否则将自动默认为未定义退出状态值。

atexit()

函数原型

#include <stdlib.h>
    
int atexit(void (*function)(void));

函数作用

注册一个进程退出处理函数,在进程正常退出(at normal exit)后再执行一个自己写的程序(与_exit一起使用无效),并且子进程会继承父进程注册的进程退出处理函数

函数形参

void (*function)(void):本质是一个函数指针,用于接受一个函数名,在执行结束后执行该函数的代码

abort()

函数原型

#include <stdlib.h>

void abort(void);

函数作用

立即终止当前进程,产生异常程序终止,系统会在结束进程后报一句Abort的log,但是abort()函数不会去清理进程环境,也就不会清理内存

(后附系统源码解析)

posted @ 2023-07-01 22:39  Emma1111  阅读(512)  评论(0编辑  收藏  举报