17

私はスタンドアロン アプリケーションを使用しており、start-->shutdown.

使うsignalhandlersことでできることがわかりました。
シグナルハンドラの使い方を教えてくれる人がいますか

4

1 に答える 1

38

2012年5月更新(2年半後)

Trejkaz のコメント:

INTJava の現在のバージョンでは、" " シグナルが "VM または OS によって予約されている"ため、このシグナル処理コードは失敗します。
さらに、他の有効なシグナル名は、何かがアプリケーションを閉じるように要求したときに実際に発火するものではありません (私が見つけることができたものすべてを丹念にテストしただけです...)
シャットダウンフックはほとんど機能しますが、私たちの場合は起動しないので、次のステップは明らかに、JVM の背後でハンドラーを登録することです。

「 HotSpot VM のトラブルシューティング ガイド」の「シグナルと例外処理の統合」の章では、Solaris OS および Linuxのシグナル「、、」についてのみ言及しています。 Windows での例外処理のみが言及されています。SIGTERMSIGINTSIGHUP


元の回答 (2009 年 9 月)

ShutdownHookはそのケースを処理できる必要があります

Runtime.getRuntime().addShutdownHook(new Thread(new Runnable() {
    public void run() {
        // what you want to do
    }
}));

(警告あり)
も参照してください:

簡単なシグナル処理の例として:

public class Aaarggh {
  public static void main(String[] args) throws Exception {
    Signal.handle(new Signal("INT"), new SignalHandler () {
      public void handle(Signal sig) {
        System.out.println(
          "Aaarggh, a user is trying to interrupt me!!");
        System.out.println(
          "(throw garlic at user, say `shoo, go away')");
      }
    });
    for(int i=0; i<100; i++) {
      Thread.sleep(1000);
      System.out.print('.');
    }
  }
}
于 2009-09-11T05:51:47.530 に答える