1
(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

Anyone knows?

4

1 回答 1

4

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

来自http://www.gnu.org/software/libc/manual/html_mono/libc.html的 glibc 手册(详情请查看 glibc 的源代码):

25.6.1 正常终止

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

— 功能:无效退出(int 状态)

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

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

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

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

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

_exit 被调用,终止程序。请参阅端接内部。

在“终端内部”部分:

25.6.5 终端内部

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

— 函数:void _exit (int status)

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

于 2012-01-23T17:17:27.053 回答