欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

_exit、exit、return区别

程序员文章站 2022-07-13 23:33:56
...

这三个函数的区别多少知道一点,但对其细节有时候会忘了这里进行简单总结一下备忘

return是跳出当前的函数执行环境,返回到调用处
_exit和exit则均可以结束一个正常执行的程序

在main中调用return将返回到运行库的入口函数中,后面将调用exit,exit内部又将调用_exit

main->return->exit->_exit

通过上述的调用关系可以看出,return的含义比较明显(即返回到调用处),下面将简单说明exit和_exit的执行流程。

exit(status)
(1)All functions registered with atexit(3) and on_exit(3) are called, in the reverse order of their registration. **
(2)
All open stdio(3) streams are flushed and closed. Files created by tmpfile(3) are removed.**
(3)call _exit()

_exit(status)
_exit内部调用系统调用sys_exit,系统调用内执行的动作就比较多源码参见do_exit(),大致的流程为
(1)exit_mm(); 尝试释放映射的内存页
(2)exit_sem(tsk); 尝试释放信号量相关结构
(3)exit_shm(tsk); 尝试释放共享数据的相关结构
(4)exit_files(tsk); 尝试释放struct_file结构
(5)exit_fs(tsk); 尝试释放struct_fs结构等