我有一个通过 Runtime.getRuntime().exec(command) 启动 C 编译程序的 java 程序。此“命令”使用环境变量。
如果 java 程序仍在运行,但在调用 exec(command) 之前(由另一个外部进程)更改了 env 变量,则 C 程序仍将具有旧的 env 值。
似乎 C 程序正在从主 Java 进程获取它的环境,因为当 java 进程重新启动时 env 值是正确的。有没有办法强制在 Java 进程中刷新 env 变量?
我有一个通过 Runtime.getRuntime().exec(command) 启动 C 编译程序的 java 程序。此“命令”使用环境变量。
如果 java 程序仍在运行,但在调用 exec(command) 之前(由另一个外部进程)更改了 env 变量,则 C 程序仍将具有旧的 env 值。
似乎 C 程序正在从主 Java 进程获取它的环境,因为当 java 进程重新启动时 env 值是正确的。有没有办法强制在 Java 进程中刷新 env 变量?
不要使用环境变量。
您所描述的行为是环境变量的工作方式。您对进程环境所做的更改会传播到其子进程。但是,子进程所做的更改不会传播回父进程,任意进程也不会相互更新。
最简单的替代方法是存储在众所周知的位置的配置文件。
您的 Java 应用程序可以在您启动 C 应用程序后立即存储环境变量的值,然后您使用将始终运行的线程类。这个线程类会一直检查环境变量是否已经改变,这就是为什么我们保存了环境变量之前的值,所以如果它改变了,那么你别无选择,只能通过运行时再次执行你的 C 程序。
例如:
//inside your thread
if (!envVar.equals(envVarPReviousValue)) {
//execute again
Runtime.getRumtime().exec("C-app");
}