这三个函数的区别多少知道一点,但对其细节有时候会忘了这里进行简单总结一下备忘
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结构等
网友评论