libc.so中exit和_exit之间的区别是什么?

时间:2011-04-07 05:44:33

标签: exit libc

(gdb) info symbol exit
exit in section .text of /lib64/libc.so.6
(gdb) info symbol _exit
_exit in section .text of /lib64/libc.so.6

有谁知道?

1 个答案:

答案 0 :(得分:3)

简单地说,exit是一个高级函数,你应该调用它来退出进程,它会调用退出处理程序和其他一些高级清理工具。 _exit是一个低级清理函数,它被称为exit的最后一步。 exit将真正终止该过程(通过退出系统调用)。

来自glibc手册 在http://www.gnu.org/software/libc/manual/html_mono/libc.html(有关详细信息,请查看glibc的源代码):

  

25.6.1正常终止

     

当程序发出信号通过调用exit完成时,进程正常终止。从main返回等同于调用exit,并且main返回的值用作退出的参数。

     

- 功能:void exit(int status)

     

exit函数告诉系统程序已完成,这会导致程序终止。

     

status是程序的退出状态,它将成为进程终止状态的一部分。此功能不会返回。

     

正常终止会导致以下操作:

     

使用atexit或on_exit函数注册的函数按其注册的相反顺序调用。此机制允许您的应用程序指定自己的“清理”操作,以便在程序终止时执行。通常,这用于执行诸如将程序状态信息保存在文件中或解锁共享数据库中的锁之类的操作。

     

关闭所有打开的流,写出任何缓冲的输出数据。请参阅关闭流。此外,删除了使用tmpfile函数打开的临时文件;请参阅临时文件。

     

调用_exit,终止程序。见终止内部。

在“终止内部”一节中:

  

25.6.5终止内部人员

     

_exit函数是用于退出进程终止的原语。它在头文件unistd.h中声明。

     

- 功能:void _exit(int status)

     

_exit函数是使进程以状态状态终止的原语。调用此函数不会执行使用atexit或on_exit注册的清理函数。