JAVA 返回 "Linux-all-ports"作为 os.name。 "Linux"as os.name 相比有什么意义?

标签 java linux operating-system

我有两个相同的*系统。一个返回 "Linux-all-ports",一个从 System.getProperty("os.name") 返回 "Linux"

“Linux-all-ports” 是什么意思?为什么一个系统会返回一个,而一个系统会返回另一个? JAVA 中是否存在可以更改此属性或其他内容的内部状态?

注意:特定硬件可能不相同(主板、芯片组、PCI 卡等),但我们不希望这会更改 os.name正确的?如果硬件会影响 os.name 属性,那将是非常好的。

*两台机器 PXE 从相同的操作系统镜像 (Ubuntu) 启动,我们确认 JAVA ver/build 是相同的,uname 的输出是相同的,所以我们非常有信心环境是相同的.

最佳答案

在 Linux 系统上,System.getProperty("os.name") 应该返回 "Linux"

但是os.name 属性不是只读的,因此任何人都可以将其更改为任意值。 (这看起来很疯狂)。

"Linux-all-ports" 在 RXTX 库之外没有任何意义;它是由该项目的开发人员组成的。有人将 os.name 设置为该值以触发 RXTX 库中的某个神奇开关,并且永远不会将其设置回来。

tl;dr 部分:

如果您的应用程序需要一些自定义设置,则在启动 JVM 时设置系统属性会很有用。但是让它们在应用程序中可写似乎很尴尬。

我假设像 os.name 这样的东西永远不会是用户可设置的值,所以我假设它的设置很重要。但这种情况并非如此。您可以将 os.name"Linux" 更改为 "ZippityFreakinDooDaa" 并彻底破坏所有内容。

甲骨文 acknowledges this here :

Warning: Changing system properties is potentially dangerous and should be done with discretion. Many system properties are not reread after start-up and are there for informational purposes. Changing some properties may have unexpected side-effects.

显然可以使用 Security Manager 保护系统属性(设为只读) .

关于JAVA 返回 "Linux-all-ports"作为 os.name。 "Linux"as os.name 相比有什么意义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31947781/

相关文章:

java - 使用自定义序列化对象序列化 HashMap

Java从1.4升级到6

java - kotlin 内部类无法访问外部的私有(private)方法?

c - 如何检查2台服务器之间的状态?

linux - apache 重写的 URL 包含完整的 Linux 路径

ruby: usr/bin/environment ruby​​ 没有这样的文件或目录

java - UnsatisfiedDependencyException 在 SpringBoot 中使用 @DataJpaTest

memory-management - 分配给进程的虚拟内存

c - 将所有处理器能力专用于一项任务

java - 如何将系统性能值量化为单个性能值