假设我们有一个打开的SocketChannel. 在终止应用程序之前明确关闭它是否重要?换句话说,如果我们不这样做,是否有留下未关闭系统资源的风险?
2 回答
慕斯王
TA贡献1864条经验 获得超2个赞
假设您的操作系统是现代多用户操作系统,则不存在退出进程而不关闭通道、文档、文件描述符的风险,这将使资源处于未关闭状态。用户空间进程拥有的所有资源在进程退出时由操作系统适当处理(即,如果需要,则关闭1)。
这适用于用户进程是运行 Java 应用程序的 JVM 以及任何其他类型的用户进程。
1 - 这比“一切都已关闭”要复杂一些。例如,在 UNIX/Linux 中,子进程可以从其父进程继承打开的“文件”句柄,因此可以想象两个或多个用户进程可以共享一个网络套接字。操作系统将使用引用计数处理这种情况。
侃侃尔雅
TA贡献1801条经验 获得超16个赞
当您的进程终止并且所有进程的资源将被释放时,套接字将自动关闭。
但是如果这是一个 TCP 套接字,那么发生这种情况时一般不会通知另一端。就像有人拔掉了网线一样。
如果您在同一台机器上的进程之间进行通信,那么您可能希望改用管道,当您的一端自动关闭时,它会向另一端提供可靠的通知。
如果您想生成一个进程并在父进程宕机时让它死掉,我建议为此使用一个未命名的管道到子进程 stdin。这是最简单的事情,而且非常可靠。
添加回答
举报
0/150
提交
取消