2012-04-07 6 views
1

Javaで書かれたアプリケーションをUnix上で実行し、起動時に2つのサブプロセス(Runtime.getRuntime().exec()経由)を開始します。なんらかの理由でアプリケーションがクラッシュした場合、サブプロセスは強制終了されません。Java:Unix上のすべてのサブプロセスをkillする

ここで、すべてのクラッシュ時にシャットダウンフックが追加されました。これまでのところokです。しかし、私はアプリケーションのすべてのサブプロセスに対してUNIXコンソールにSIGTERMシグナル(または少なくともSIGINT)を送信したいと思います。私はps経由でプロセスIDを見つけることができるはずですが、PIDを正しく抽出してすべてのプロセスにシグナルを送信するようにはしませんでした。

誰でも手助けできますか?

ありがとうございました!

+0

シェルスクリプトで必要なことをする、つまりPIDを指定してプロセスを見つけ、それをシェルスクリプト自体で強制終了します。このスクリプトをjavaで呼び出します。 – Ved

+0

アプリケーションに特定の名前がある場合、pkillはその名前で動作します。 – tartar

+0

別のスタブかもしれない[1] http://blog.igorminar.com/2007/03/one-more-way-how-to-get-current-pid-in.html – tartar

答えて

2

私はそれが正式な機能ではないことを示唆していますが、トリックです。

これは、私のJavaアプリケーションのプロセスIDを取得する方法です。私は別の方法を見つけたことはありません

public static final String getPid() { 
    try { 
     RuntimeMXBean runtimeBean = ManagementFactory.getRuntimeMXBean(); 
     String name = runtimeBean.getName(); 
     int k = name.indexOf('@'); 
     if (k > 0) 
      return name.substring(0, k); 
    } catch (Exception ex) { 
    } 
    return null; 
} 

これはwin、mac、linuxで動作します。

関連する問題