我们在 Linux 机器上运行了 jdk 1.6 的 java 进程(cassandra 服务),并且我们使用 rpm 包将机器中的 JDK 从 1.6 升级到 1.7,而无需停止该进程(/usr/bin/jdk1.6/bin/java) 与早期版本的 java 一起运行。
升级成功后,旧版本的jdk从机器上删除,只有新版本(1.7)可用,但之前使用旧版本(1.6)运行的进程不受影响,仍在运行旧路。尽管该进程显示的旧 java 路径现在在机器中不存在。
有人可以向我解释一下这种行为吗?
最佳答案
这是 Unix/Linux 处理打开文件的方式。旧版本的卸载要求操作系统取消文件链接。然而,它们仍然是开放的(这可以用lsof
显示),因此仍然被认为是有效的。一旦关闭所有打开的文件句柄,这些文件将被“永久”删除。更多信息可以是 found here .
关于linux - Linux 中基于 rpm 的 JDK 从 1.6 升级到 1.7 期间,现有 java 进程不受影响,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18796572/