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