我用exit()
来终止进程。 我没有任何退出处理程序注册,我也不关心在退出时冲洗缓冲区,所以想用_exit()
作为更健壮的方法来终止进程。
唯一的问题是, _exit()
处理closures所有打开的文件描述符并优雅地打开套接字?
函数exit
调用_exit
。 从TLPI:
以下操作由exit()执行:
- 调用退出处理程序
- stdio流缓冲区被刷新
- _exit()系统调用被调用
_exit的标准页面这样说:
在调用过程中打开的所有文件描述符 ,目录流,转换描述符和消息目录描述符均应关闭。
是的。 实际上,在大多数平台上,操作系统关闭了终止进程的文件和套接字,所以用_exit()
, exit()
, assert(false)
或kill -KILL
。
请注意,stdio FILE *
流不会被_exit()
正确关闭,而任何未写入(仍然是缓冲)的数据将会丢失。