exit()vs _exit():调用_exit()是否确保closures所有打开的fd和套接字?

我用exit()来终止进程。 我没有任何退出处理程序注册,我也不关心在退出时冲洗缓冲区,所以想用_exit()作为更健壮的方法来终止进程。

唯一的问题是, _exit()处理closures所有打开的文件描述符并优雅地打开套接字?

函数exit调用_exit 。 从TLPI:

以下操作由exit()执行:

  • 调用退出处理程序
  • stdio流缓冲区被刷新
  • _exit()系统调用被调用

_exit的标准页面这样说:

在调用过程中打开的所有文件描述符 ,目录流,转换描述符和消息目录描述符均应关闭。

是的。 实际上,在大多数平台上,操作系统关闭了终止进程的文件和套接字,所以用_exit()exit()assert(false)kill -KILL

请注意,stdio FILE *流不会被_exit()正确关闭,而任何未写入(仍然是缓冲)的数据将会丢失。