質問

どうすればインターセプト Ctrl + C (通常はプロセスを強制終了します) CLI(コマンドラインインターフェイス)Javaアプリケーションの場合

マルチプラットフォームソリューションは存在しますか(Linux、Solaris、Windows)

Console readLine()を使用していますが、必要に応じて他の方法を使用できます 標準入力から文字を読み取る。

役に立ちましたか?

解決

Runtime.getRuntime().addShutdownHook(new Thread() {
    public void run() { /*
       my shutdown code here
    */ }
 });

これは信号をインターセプトできるはずですが、JVMが完全にシャットダウンする前の中間ステップとしてのみ、必要なものではない可能性があります。

トリガーされる SIGINT シグナルをインターセプトするには、 SignalHandler sun.misc.SignalHandler )を使用する必要があります Ctrl + C で(UnixおよびWindowsで)。
この記事(pdf、8ページおよび9)。

他のヒント

あなたは正常にシャットダウンし、シャットダウンプロセスを短絡させないことを前提としています。私の仮定が正しい場合は、シャットダウンフック

何らかの理由でシャットダウンせずに Ctrl + C を処理できるようにするには、何らかの形式の信号処理を使用する必要があります( Ctrl + C 入力は実際にはアプリケーションに直接渡されませんが、代わりにJavaに渡されるSIGINTを生成するOSによって処理されます。

http://www.oracle.com/technetwork/を参照信号処理の詳細については、java / javase / signals-139944.html を参照してください。

(正常にシャットダウンしたい場合は、akfの答えで十分です。)

SIGTERMの処理方法に関するリンク-プログラムがOS側で取得している信号:

http://blog.webinf.info/2008/08/intercepting -sigterm.html

http://java.sun .com / javase / 6 / webnotes / trouble / TSG-VM / html / signals.html

http://www.ibm.com/developerworks/java/ library / i-signalhandling /

これはPOSIXオペレーティングシステムで動作するはずです。つまり、MacとUnixは動作するはずです。Windowsでもわからないのですが、POSIXとある程度互換性があると聞いたのを覚えていますが、異なるバージョンではさまざまな機能があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top