(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
有人知道吗?
exit
是一个高级函数,你应该调用它来退出进程,它会调用 on-exit 处理程序和一些其他高级清理工作。 _exit
是一个低级清理函数,它在 exit
的最后一步被调用。 exit
将通过进行 exit 系统调用来真正终止进程。25.6.1 正常终止
当一个进程通过调用exit来发出程序已完成的信号时,它会正常终止。从main函数返回与调用exit等效,而main返回的值将被用作exit的参数。
— 函数:void exit(int status)
exit函数告诉系统程序已完成,导致终止该进程。
status是程序的退出状态,它成为进程终止状态的一部分。此函数不返回任何值。
正常终止会引起以下操作:
使用atexit或on_exit函数注册的函数按照它们注册的相反顺序调用。这个机制允许您的应用程序指定其自己的“清理”操作,在程序终止时执行。通常,这用于做一些像在文件中保存程序状态信息,或者在共享数据库中解锁锁的事情。
所有打开的流都会关闭,并写出任何缓冲输出数据。请参阅关闭流。此外,使用tmpfile函数打开的临时文件将被删除,请参阅临时文件。
调用_exit,终止程序。请参阅终止内部。
在“终止内部”一节中:
25.6.5 终止内部
_exit 函数是通过 exit 进行进程终止所使用的原语。它在头文件 unistd.h 中声明。
— 函数:void _exit (int status)
_exit 函数是用于使进程以状态 status 终止的原语。调用此函数不会执行已注册 atexit 或 on_exit 的清理函数。