4

我有一个通过 Runtime.getRuntime().exec(command) 启动 C 编译程序的 java 程序。此“命令”使用环境变量。

如果 java 程序仍在运行,但在调用 exec(command) 之前(由另一个外部进程)更改了 env 变量,则 C 程序仍将具有旧的 env 值。

似乎 C 程序正在从主 Java 进程获取它的环境,因为当 java 进程重新启动时 env 值是正确的。有没有办法强制在 Java 进程中刷新 env 变量?

4

2 回答 2

3

不要使用环境变量。

您所描述的行为是环境变量的工作方式。您对进程环境所做的更改会传播到其子进程。但是,子进程所做的更改不会传播回父进程,任意进程也不会相互更新。

最简单的替代方法是存储在众所周知的位置的配置文件。

于 2013-02-26T19:14:01.173 回答
0

您的 Java 应用程序可以在您启动 C 应用程序后立即存储环境变量的值,然后您使用将始终运行的线程类。这个线程类会一直检查环境变量是否已经改变,这就是为什么我们保存了环境变量之前的值,所以如果它改变了,那么你别无选择,只能通过运行时再次执行你的 C 程序。

例如:

//inside your thread
if (!envVar.equals(envVarPReviousValue)) { 
//execute again
Runtime.getRumtime().exec("C-app");
}
于 2013-02-26T18:59:23.660 回答