_Exit(2)
是来自 C99 标准。而 _exit(2)
是来自 POSIX 标准。至少根据我在这里安装的 man 手册是这样说的。
它们是完全等效的。
以下内容翻译自此处的man页面:
_Exit()函数等同于_exit()函数。
然而在C++11中,它被标准化为std::_Exit或std::quick_exit。根据Mike Seymour在这里的回答。
_Exit()
函数终止时不会调用使用atexit(3)
函数注册的函数,并且可能或可能不执行其他操作,这些操作包括刷新打开的输出流、关闭打开的流和取消链接使用tmpfile(3)
创建的临时文件。在此之后,exit()
和_Exit()
都调用_exit()
来终止进程。 - mgd_exit()
和_Exit()
是完全相同的。要了解exit()
和_exit()
之间的区别,您需要了解函数on_exit(3)
和atexit(3)
。这些函数用于注册在进程正常退出时自动调用的函数,即通过从main()
返回或通过调用exit()
。 on_exit()
和atexit()
仅在允许使用不同签名(将这些已注册的函数视为进程的析构函数(如面向对象编程中))方面有所不同。
调用exit()
后,尝试执行使用atexit()
或onexit()
注册的所有函数。在执行它们后,它调用_exit()
。_exit()
执行正常的进程终止操作 - 关闭文件描述符,释放内存,重新父进程孤儿子进程到init等。将_exit()
视为进程用于终止自身的基本系统调用。
由于许多应用程序不使用atexit()
或on_exit()
,因此对于这些应用程序,_exit()
、_Exit()
和exit()
的行为是相同的。