【发布时间】:2013-02-26 18:45:09
【问题描述】:
我有一个 java 程序,它通过 Runtime.getRuntime().exec(command) 启动一个 C 编译程序。此“命令”使用环境变量。
如果 java 程序仍在运行,但在调用 exec(command) 之前(由另一个外部进程)更改了 env 变量,则 C 程序仍将具有旧的 env 值。
似乎 C 程序正在从主 Java 进程获取它的环境,因为当 Java 进程重新启动时 env 值是正确的。有没有办法强制在 Java 进程中刷新 env 变量?
【问题讨论】:
-
我认为这与 Java 没有任何关系——只是在启动子进程时如何重新加载环境变量。
-
@djechlin no OP 想要将更改后的环境加载到 Java 程序中
-
@Mark 但这是一个操作系统问题,Java 像任何其他程序一样获得它的环境
-
我必须指出,说“环境变量已更改”是无稽之谈。 Changed 的意思是“相对于环境”,在这种情况下,“环境”的意思是“不同的”。那么你在什么环境下(很吵)听 env 变量的变化,到底为什么?
-
澄清一下,我调用的 C 程序是供应商的程序,所以我无法控制它。我的 Java 代码对他的环境变量一无所知,也不应该关心。问题是它在 JVM 启动时出现,它从操作系统获取 env 值并在使用 runtime.exec 生成进程时传递这些 env 值。因此,生成的进程 A 使用 env 变量。当需要时进程 A 被终止并且进程 B 运行并最终更新了 env 变量。进程 A 再次重新启动。但是进程 A 的第二次启动没有看到进程 B 设置的更新值。
标签: java exec environment-variables