_exit、exit、return区别

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

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结构等

你可能感兴趣的