【发布时间】:2012-01-20 07:08:06
【问题描述】:
我使用exit() 来终止进程。我没有注册任何退出处理程序,我也不关心在退出时刷新缓冲区,所以考虑使用 _exit() 作为更强大的方法来终止进程。
唯一的问题是,_exit() 是否优雅地处理关闭所有打开的文件描述符和打开的套接字?
【问题讨论】:
我使用exit() 来终止进程。我没有注册任何退出处理程序,我也不关心在退出时刷新缓冲区,所以考虑使用 _exit() 作为更强大的方法来终止进程。
唯一的问题是,_exit() 是否优雅地处理关闭所有打开的文件描述符和打开的套接字?
【问题讨论】:
函数exit 调用_exit。来自 TLPI:
exit() 执行以下操作:
- 调用退出处理程序
- stdio 流缓冲区被刷新
- _exit() 系统调用被调用
所有文件描述符、目录流、转换 描述符和消息目录描述符在调用中打开 进程应关闭。
【讨论】:
是的,是的。实际上,在大多数平台上,操作系统会为终止的进程关闭文件和套接字,因此它是否以_exit()、exit()、assert(false) 或kill -KILL 结束并不重要。
请注意,_exit() 未正确关闭 stdio FILE * 流,并且任何未写入(仍在缓冲)的数据都将丢失。
【讨论】: