1

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

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

誰でも助けることができますか?

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

4

1 に答える 1

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 で動作します。

于 2012-04-07T12:34:21.617 に答える