ProcessBuilder
別の Java プログラムから
起動されている Java プログラムがあります。System.exit(0)
子プログラムから呼び出されますが、一部のユーザー (Windows 上) ではjava.exe
、子に関連付けられたプロセスが終了しません。子プログラムにはシャットダウン フックがなく、VM の終了をSecurityManager
停止する可能性のあるもありません。System.exit()
Linux または Windows Vista で問題を自分で再現できません。これまでのところ、この問題に関する報告は、2 つの異なる JRE (1.6.0_15 と 1.6.0_18) を使用している 2 人の Windows XP ユーザーと 1 人の Vista ユーザーからのものだけですが、彼らは毎回問題を再現することができます。
System.exit()
の後に JVM が終了せず、一部のマシンでのみ終了する理由を誰かが提案できますか?
編集 1:問題のある VM からスレッド ダンプを取得できるように、ユーザーに JDK をインストールしてもらいました。ユーザーが私に言ったのは、メニューの「終了」項目をクリックするとすぐに VM プロセスが VisualVM から消えるということですが、Windows タスク マネージャーによると、プロセスは終了していません。ユーザーが (分、時間) 待機しても、終了することはありません。
編集 2:Process.waitFor()
親プログラムでは、問題を抱えているユーザーの少なくとも 1 人に対して決して返らないことを確認しました。要約すると、子 VM は停止しているように見えますが (VisualVM はそれを認識していません)、親はまだプロセスを稼働中であると認識しており、Windows も同様です。