为了账号安全,请及时绑定邮箱和手机立即绑定

SocketChannel 是否必须在应用程序关闭时显式关闭?

SocketChannel 是否必须在应用程序关闭时显式关闭?

繁华开满天机 2021-09-15 15:04:07
假设我们有一个打开的SocketChannel. 在终止应用程序之前明确关闭它是否重要?换句话说,如果我们不这样做,是否有留下未关闭系统资源的风险?
查看完整描述

2 回答

?
慕斯王

TA贡献1864条经验 获得超2个赞

假设您的操作系统是现代多用户操作系统,则不存在退出进程而不关闭通道、文档、文件描述符的风险,这将使资源处于未关闭状态。用户空间进程拥有的所有资源在进程退出时由操作系统适当处理(即,如果需要,则关闭1)。

这适用于用户进程是运行 Java 应用程序的 JVM 以及任何其他类型的用户进程。


1 - 这比“一切都已关闭”要复杂一些。例如,在 UNIX/Linux 中,子进程可以从其父进程继承打开的“文件”句柄,因此可以想象两个或多个用户进程可以共享一个网络套接字。操作系统将使用引用计数处理这种情况。


查看完整回答
反对 回复 2021-09-15
?
侃侃尔雅

TA贡献1801条经验 获得超16个赞

当您的进程终止并且所有进程的资源将被释放时,套接字将自动关闭。

但是如果这是一个 TCP 套接字,那么发生这种情况时一般不会通知另一端。就像有人拔掉了网线一样。

如果您在同一台机器上的进程之间进行通信,那么您可能希望改用管道,当您的一端自动关闭时,它会向另一端提供可靠的通知。

如果您想生成一个进程并在父进程宕机时让它死掉,我建议为此使用一个未命名的管道到子进程 stdin。这是最简单的事情,而且非常可靠。


查看完整回答
反对 回复 2021-09-15
  • 2 回答
  • 0 关注
  • 280 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信