我有两个相同的*系统。一个返回"Linux-all-ports"
,一个从"Linux"
返回System.getProperty("os.name")
。
"Linux-all-ports"
是什么意思?为什么一个系统返回一个系统,一个系统返回另一个系统? JAVA中是否存在可以更改此属性的内部状态?
注意:特定硬件可能不相同(主板,芯片组,PCI卡等),但我们不希望这会改变操作系统.name对吗?如果硬件会影响os.name属性,那么肯定会很清楚。
*两台机器PXE从同一操作系统映像(Ubuntu)启动,我们确认JAVA ver / build是相同的,uname
的输出是相同的,所以我们非常有信心环境是相同的。
答案 0 :(得分:0)
在Linux系统上,System.getProperty("os.name")
应返回"Linux"
。
但是,os.name
属性不是只读属性,因此任何人都可以将其更改为任意值。 (这看起来很疯狂)。
"Linux-all-ports"
在RXTX库之外没有任何意义;它由该项目的开发人员组成。有人将os.name
设置为该值以触发RXTX库中的某个魔术开关,并且永远不会将其设置回来。
tl; dr section:
如果您的应用程序需要一些自定义设置,则在启动JVM时设置系统属性非常有用。但是从应用程序中使它们可写可能很尴尬。
我假设os.name
之类的内容永远不会是用户可设置的值,所以我认为它设置的内容非常重要。但这种情况并非如此。您可以将os.name
从"Linux"
更改为"ZippityFreakinDooDaa"
并完全破坏所有内容。
Oracle 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保护系统属性(使其成为只读)。