クライアントとサーバー JVM があるネットワーク アプリケーションを開発しています。どちらも、同じ場所に格納されている場合と格納されていない場合があります。サーバーに接続した直後に、クライアントはその jar の MD5 Sum をサーバー上の jar と比較します。MD5 サムが一致しない場合、クライアントはサーバーの jar を新しいフォルダーにダウンロードしProcess
、クライアントが現在使用しているどの jar にも依存しない新しいフォルダーを生成しようと試みてから終了します。この新しいProcess
ものは、クライアントが上記の新しいフォルダーに保存したサーバーからのコピーでクライアントのjarを上書きし、終了することになっています。
問題は、クライアントが新しいプロセスを起動しようとするたびに、クライアントの JVM がサイレントに終了することです。新しい を生成するコードは次のProcess
とおりです。
System.err.println("##### creating ProcessBuilder ...");
ProcessBuilder pb = new ProcessBuilder();
System.err.println("##### setting command line args ...");
pb.command("java","-jar","some-jar-not-used-by-the-client.jar");
System.err.print("##### starting ProcessBuilder: ");
for(String opt : pb.command()) System.err.print(opt+" ");
System.err.println();
pb.start();
System.err.println("##### Process started, exiting host process ...");
クライアントは への呼び出しで終了しているように見えますpb.start()
。私のプログラムのコンソール出力は次のとおりです。
##### creating ProcessBuilder
##### setting command line args
##### starting ProcessBuilder: java -jar some-jar-not-used-by-the-client.jar
後のprintステートメントはpb.start()
決して呼び出されません。私はこれを Java 6 と Java 7 の両方でテストしましRuntime.getRuntime().exec()
た。誰もこのようなものを見たことがありますか?