进程退出方法总结与exit函数&_exit函数
来源:互联网 发布:淘宝店标 编辑:程序博客网 时间:2024/05/17 01:12
一、简介
一般情况下进程正常退出返回0,异常退出则返回相应的退出码。而一个程序一般的退出场景有以下三个:
- 代码运行结束,结果正确
- 代码运行结束,结果不正确
- 代码异常终止
常见的进程退出方式有正常结束和异常退出
正常结束:
- 1、main函数中执行return退出
- 2、exit
- 3、_exit
异常结束:
- 1、ctrl + c,信号终止
- 2、kill信号终止——
- 3、abort()
不管进程是上述什么方法退出的,系统最后都会执行内核中的一段相同代码,这段代码用来关闭进程所打开的文件描述符,用来释放它所占用的内存和其他相关的资源。
二、exit函数与_exit函数
(1)退出码
首先我们来介绍以下退出码,我们知道程序如果出错,都会返回一个退出码,那么这些退出码是什么呢?
exit的函数中可以让我们使用的错误码只有0~255(八个比特位,退出码存放在第八到第十六位),其他位被标记了别的信息。比如程序是否正常退出,如果是异常退出,退出码它会指明是什么原因导致异常退出的。
(2)_exit函数(系统调用到内核执行)
是系统调用,直接返回内核,没有多余的东西。
在Linux下我们man _exit
会得到关于_exit函数的手册信息,里面详细的包含了它的各种信息,我们来看一下它的简单信息:
#include <unistd.h>void _exit(int status);#include <stdlib.h>void _Exit(int status);
- 其中status定义了进程的终止状态,父进程可以通过wait来获取该值,它是一个int,但是仅有8位可以被父进程所使用,所以我们执行_exit(-1)的时候,在终端执行$?它返回的值是255。
(3)exit函数
我们在Linux下使用man 3 exit即可得到exit函数的相关信息。
exit函数原型为:
#include <stdlib.h>void exit(int status);
其中的参数status和_exit中的参数是一样的,都表明了进程的终止状态。
exit函数所做的事情:
第一件事刷新输出缓冲区,接着在做一大堆事情,最后调用_exit函数,准确来说是下面三个事情。
- 1、执行用户通过atexit或者_exit定义的清理函数。
- 2、关闭所有打开的流,并且将所有的缓存数据写入。
- 3、调用_exit函数进入内核。
举例说明:
我们在Linux下分别写下如下代码
①调用_exit函数:
#include <unistd.h>#include <stdlib.h>#include <stdio.h>int main(void){ printf("haha"); _exit(0);}
②调用exit函数:
#include <unistd.h>#include <stdlib.h>#include <stdio.h>int main(void){ printf("haha"); exit(0);//此处与上面的代码不一样}
结果如下:
①调用_exit函数:
②调用exit函数:
我们看到如上代码只是调用的函数不相同,因为exit函数由于会刷新缓冲区,所以会在屏幕上显示出来,而_exit函数直接进入内核,所以不会显示出来内容。
(4)exit函数与_exit函数的区别
三、return退出
return退出是一种非常常见的退出方式,我们一般执行return n即等于执行exit(n),这时因为我们在main运行结束的时候会将main的返回值当作exit的参数。
阅读全文
0 0
- 进程退出方法总结与exit函数&_exit函数
- 进程,函数退出exit和_exit
- 程序退出函数---exit,_exit,_Exit,abrot
- Linux退出进程exit/_exit和等待子进程退出wait函数分析
- linux C 进程结束 exit与_exit函数
- 进程退出函数exit()
- linux系统编程之进程(四):进程退出exit,_exit区别即atexit函数
- linux系统编程之进程(四):进程退出exit,_exit区别即atexit函数
- linux系统编程之进程(四):进程退出exit,_exit区别即atexit函数
- 进程终止函数:abort, atexit, exit, _exit, _Exit
- LINUX退出当前进程——比较return、exit()和_exit()函数
- exit、_exit、函数与return的不同
- exit()与_exit()函数的区别
- exit()与_exit()函数的区别
- exit()与_exit()函数的区别
- exit()和_exit()函数
- exit()和_exit()函数
- exit()和_exit()函数
- Android四大组件
- mongoDB下载安装
- opensuse Tumbleweed 笔记
- 第十四周训练总结(二)
- TI Z-stack协议栈开发环境和工作流程
- 进程退出方法总结与exit函数&_exit函数
- 自定义view无限轮播—— Banner
- 关于 SAXParseException Content is not allowed in Prolog (前言中不允许有内容)
- 小结
- 机器学习(2) 变分推断
- 对象间的联动——观察者模式(五)
- PAISR:Rapid and Accurate Image Super Resolution 详解(内附代码code)
- [BZOJ1005][HNOI2008]明明的烦恼(prufer计数+组合数)
- [树形DP+贪心]BZOJ 1217—— [HNOI2003]消防局的设立 Plus?