_Exit()和_exit()有什么区别?

4

回答这个问题时,有些人说要使用_Exit(),而其他人则说要使用_exit()。请问两者之间有什么区别(如果有的话),以及它们的起源是什么?


1
嗯,那个问题的答案中几乎都有了,包括定义它们的标准。实际上,您链接的 man 页面告诉您每个标准来自哪里...您需要澄清哪些答案? - Brian Roach
1
起源,因此为什么选择其中之一。 - Samuel Harmer
3个回答

5

_Exit(2) 是来自 C99 标准。而 _exit(2) 是来自 POSIX 标准。至少根据我在这里安装的 man 手册是这样说的。

它们是完全等效的。


5

以下内容翻译自此处的man页面:

_Exit()函数等同于_exit()函数。

然而在C++11中,它被标准化为std::_Exit或std::quick_exit。根据Mike Seymour这里的回答。


1
在Linux上它们是等效的。然而,在OS X(BSD)上,_Exit()函数终止时不会调用使用atexit(3)函数注册的函数,并且可能或可能不执行其他操作,这些操作包括刷新打开的输出流、关闭打开的流和取消链接使用tmpfile(3)创建的临时文件。在此之后,exit()_Exit()都调用_exit()来终止进程。 - mgd

1

_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()的行为是相同的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接