すべての単体テストに合格する (非常に) マルチスレッド化されたアプリケーションがありますが、IDE またはコマンド ラインから実行すると終了しません。このアプリはマルチスレッド化されているだけでなく、ネイティブ プロセスを実行し、標準エラーと標準出力に書き込みます。問題は、アプリが終了時にハングすることでした。最終的に、単体テストと同じになるまでアプリを縮小しましたが、それでもハングするので、JUnit はコマンド ライン起動ではできないことをしていると考えました。
main(args) の最後で System.exit() を呼び出すと、アプリが終了し、最終的に System.err.close() に進みます。
もちろん、アプリが System.err または System.out を「開く」ことはありません。それらに書き込むだけで、終了時に flush() を呼び出します。64 ビット Windows でのみテストしました。後で Linux でテストします。JVM は Java(TM) SE ランタイム環境 (ビルド 1.6.0_24-b07) です。
JVM が終了しない理由はありますか?