4

Runtime.getRuntime().exec(command) を介して C コンパイル プログラムを起動する Java プログラムがあります。この「コマンド」は環境変数を使用します。

Java プログラムがまだ実行中であるが、exec(command) を呼び出す前に (別の外部プロセスによって) env 変数が変更された場合、C プログラムは古い env 値を保持したままになります。

Javaプロセスが再起動されたときにenv値が正しいため、CプログラムはメインのJavaプロセスから環境を取得しているようです。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 に答える