2012-05-11 10 views
1

私はコードは、基本的にこの作品、この時間のSystem.exitによってRuntime.execが殺されるのですか?

Runtime.exec(....); 

System.exit(0); 

99.8%のように見えるbatファイルを実行することになっているJavaプログラムを持ち、その後、成功コード0

で終了完全に。しかし、非常に散発的には、バットファイルは実行されません。

私の理論によると、特定のシステムでは、System.exitが実行される前にRuntime.execの生成が完了できません。これは可能/可能か?

私はRuntime.execのソースを調べましたが、興味深いものを実行するためにネイティブコードに落ちています。

これまでの回答に基づいて

EDIT、私は.batファイルはjavawをを使用して、別のjavaプロセスを実行することを明記してください。私は1番目のJavaプロセスの終了がbatファイルで2番目のJavaプロセスを終了させないことを確認できます。

問題が発生した場合、System.exitが発生する前にbatファイルが2番目のJavaプロセスを生成していない可能性はありますか?結局のところRuntime.execの問題ではないでしょうか?

EDIT2

私はそれが無期限に実行することができ、私の第一のプロセスが終了する必要があり、最後に第二のプロセスを待つことができません。

+0

ここではjavawは必要ありません。ランタイムクラスの代わりにProcessクラスで十分でしょう。 – Harshdeep

答えて

1

親プロセスで終了する子プロセスを作成しています。 Javaプロセスがバットプロセスが完了するのを待つためには、JavaでProcess.waitForを使用する必要があります。

1

ProcessBuilderに変更してください。たぶんうまくいくかもしれない。

+2

なぜそれがうまくいくのでしょうか?これは 'Process'インスタンスを作成する代わりの方法です。 –

+0

わからない。たぶんその異なる基本的なネイティブ実装です。ちょうどアイデア。 –

0

System.exit(0)によってjvmインスタンスが強制終了されます。すべてのプロセスが終了します。 System.exit(0)を実際に実行する場合は、System.exitを呼び出す前にexecプロセスが完了していることを確認してください。

0

Process.waitFor()の場合、このメソッドの戻り値の型はintで、実行時を使用する現在のソリューションごとの戻りコードが返されます。
waitFor()は、このProcessオブジェクトが表すプロセスが終了するまで、必要に応じて現在のスレッドを待機させます。

0

Runtime.getRuntime().exec(....).waitFor(); 

System.exit(0); 

に変更し、それをしかし、これは実行とのjavawインスタンスのあなたのケースの完了でを完了するために、バッチファイルを待ちます。

関連する問題