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

时间:2012-01-20 07:08:06

标签: c linux exit

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

唯一的问题是,_exit()是否正常处理所有打开的文件描述符并打开套接字?

2 个答案:

答案 0 :(得分:6)

函数exit调用_exit。来自TLPI:

  

exit()执行以下操作:

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

standard page for _exit说:

  

所有文件描述符,目录流,转换   描述符和消息目录描述符在调用中打开   过程应该结束。

答案 1 :(得分:3)

是的,确实如此。实际上,在大多数平台上,操作系统会关闭文件和套接字以终止进程,因此如果它完成_exit()exit()assert(false)kill -KILL并不重要。

请注意,FILE *未正确关闭stdio _exit()流,并且任何未写入(仍然缓冲)的数据都将丢失。