对码当歌,猿生几何?

操作系统—进程的退出

进程退出

linux下正常的退出方式:

1.在main函数中使用了return返回. (return之后把控制权交给调用函数)

2.调用exit()或者_exit; (exit()之后把控制权交给系统)

异常退出:

1.调用abort函数
2.Ctrl+c,进程收到某个信号,而该信号是程序中止.


不管是哪一种退出方式,最后都会执行内核中的同一代码,这段代码用来关闭进程所用到的已经打开的文件描述符所占用的内存和资源


exit() 与 _exit的说明

1.exit 和 _exit函数都是用来终止进程的 . 当程序执行到 exit 和 _exit 时,系统无条件的停止剩下所有操作,清除包括PCB在内的各种数据结构, 并终止    本进程的运行.

2. exit在头文件 stdlib.h 中声明 , _exit在头文件unistd.h 中声明 . 并且 exit 中的参数为0 代表进程正常终止, 若为其他值则表示程序执行过程中有错误    发生.

3. _exit 执行后立即返回给内核, 而exit腰执行一些清除操作, 然后将控制权交给内核 

 

4. 调用_exit函数时,其会关闭进程所有的文件描述符, 清理内存以及其它一些内核清理函数, 但不会刷新流(stdin, stdout, studerr) . exit函数是在_exit    函数之上的一个封装, 其会调用_exit ,并在调用之前先刷新流.

5. exit函数和_exit函数最大的区别就在于exit函数在调用exit系统之前要检查文件的打开情况 ,把文件缓冲区的内容写回文件.

 

各种退出方式的比较

1.exit和return的比较,exit是一个函数,有参数.而return是函数执行完毕后的返回. exit把控制权交给系统,而return将控制权交给调用函数.

2.exit和abort的区别: exit是正常终止进程,而abort是异常终止.

3.exit和_exit的区别:

4.exit中的参数 如果为0代表进程正常终止,如果为其他值表示程序执行过程有错误发生,比如除数为0.

查看进程退出码

在Linux下输入命令 echo $? 即可查看上个进程的退出码了

阅读更多