我有两个相同的*系统。一个返回 "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/