終了しないプロセス
以下が再現用のプログラム。
public class test { public static void main(String[] args) throws Exception { new Thread(new Runnable() { public void run() { while(true) { try { System.out.println("Hello!"); Thread.sleep(1000); } catch(InterruptedException e) { // ignore } } } }).start(); Thread.sleep(5000); //System.exit(0); throw new NoClassDefFoundError(); } }
jarのリリースがミスってて、NoClassDefFoundErrorが起きたっていうのが、そもそもの始まりだったりするわけですが、、
System.exitだと、スレッド残っててもプロセス終了しちゃうんですね。
OutOfMemoryErrorとか、なにがしかのErrorが起きたときは、このソースだと延々終わらないプロセスになってしまうわけですが、どうしたものか。
一番安直なのは、Throwableをcatchして、System.exitすることなのだけど、さすがに安直すぎるか。
起こしたスレッド側から、メインスレッドの状態を取得して、どうにかするのが筋なのかも。