首页 > 系统相关 >【Linux进程管理】进程退出的几种方法

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

时间:2023-07-01 22:44:06浏览次数:38  
标签:函数 void 几种 退出 exit 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()函数不会去清理进程环境,也就不会清理内存

(后附系统源码解析)

标签:函数,void,几种,退出,exit,Linux,进程,终止
From: https://www.cnblogs.com/Wangzx000/p/17520092.html

相关文章

  • linux 中 M-BM- 字符的处理
     001、测试数据[root@PC1test]#lsaa.txt[root@PC1test]#cataa.txtQinghaiQinghai shandongShanghaishanxi[root@PC1test]#cat-Aaa.txtQinghai$QinghaiM-BM-$##异常字符shandong$Shanghai$shanxi$ 002、特殊字符的处理[root@PC1test]......
  • 3分钟了解Manjaro Linux
    导读在这个系列的第七篇,我们来说一说什么是Manjaro。Manjaro是基于Arch Linux 并且拥有一个漂亮的用户界面的操作系统。Manjaro并不像Debian或者 Arch这些Linux发行版一样历史悠久,但是它依然十分的稳定而可靠,从而在各色发行版中显得鹤立鸡群。2011年Manjaro才......
  • 嵌入式linux开发 | u-boot启动logo修改
    原文:https://zhuanlan.zhihu.com/p/582316377一、导读使用嵌入式linux作为设备的操作系统,当在设备上电启动后,希望显示开机logo。一般会经历以下几个流程:(1)运行芯片内部引导程序(2)运行引导加载程序(u-boot较为常用)(3)运行linux内核(4)运行用户根文件系统,在这个阶段,就会根据项目......
  • Linux 安装 Maven
    一、概要1.环境(1)RockyLinux9.1(2)Maven3.9.3二、安装1.准备(1)下载安装包wgethttps://dlcdn.apache.org/maven/maven-3/3.9.3/binaries/apache-maven-3.9.3-bin.tar.gz(2)解压tar-zxvfapache-maven-3.9.3-bin.tar.gz2.安装(1)目录a.创建sudom......
  • petalinux SDK编译及使用
    petalinuxSDK编译及使用1、编译#petalinux-build--sdk2、打包#petalinux-package--sysroot注:SDK生成在<plnx-proj>/image/linux/sdk目录3、验证#sourceimages/linux/sdk/environment-setup-aarch64-xilinx-linux#echo$CCaarch64-xilinx-linux-gcc-march=armv8-a+crc......
  • CentOS Linux的最佳替代方案(三)_银河麒麟Kylin Linux Advanced Server V10 SP2 for X86
    CentOSLinux的最佳替代方案(三)_银河麒麟KylinLinuxAdvancedServerV10SP2forX86安装教程1银河麒麟KylinLinuxAdvancedServerV10简介银河麒麟高级服务器操作系统V10是针对企业级关键业务,适应虚拟化、云计算、大数据、工业互联网时代对主机系统可靠性、安全性、性能、扩......
  • Linux安装JDK并配置环境变量
    一、查询已有JAVA环境版本信息java-version二、下载OracleJDK安装包https://www.oracle.com/java/technologies/downloads/archive/四、安装+配置JDK以下方式适用于安装各版本JDK,本文以JDK1.8为例1、创建一个java目录mkdir-p/home/local/java2、进入目录cd/home/loca......
  • Linux总结,第一篇
    GPL、BSD、MIT、Mozilla、Apache和LGPL的区别BSD是“宽容自由软件许可证”中的一员,在软件复用上给予了最小限度的限制。BSD协议允许作者使用该协议下的资源,将其并入私人版本的软件,该软件可使用闭源软件协议发布。MITMIT许可证(TheMITLicense)是许多软件授权条款中,被广泛使用......
  • Debian是一种流行的自由操作系统,它基于Linux内核,采用自由软件的方式进行开发和发布 De
    Debian是一种流行的自由操作系统,它基于Linux内核,采用自由软件的方式进行开发和发布。以下是关于Debian起源和其开发者的信息:Debian的起源:Debian的起源可以追溯到1993年,最初由IanMurdock(IanAshleyMurdock,1970-2015)创建。他希望构建一个自由、开放和稳定的操作系统发行版,以及一......
  • Linux vi/vim介绍和使用方法
    转载地址:https://mp.weixin.qq.com/s?src=11&timestamp=1688196184&ver=4623&signature=7grwe5qwSSbVOMLFHpVKVPbQ*P3bBkBOSecso3*W6NrVlBPyQEs8rNYi6us*saIT8H9WiRcaT0Qg6CEv-B3OUqCJzOfaAC-FpTSeREgreWCxTjI212YAnNkKBLqWCOBS&new=1......