CLI (コマンド ライン インターフェイス) Java アプリケーションで+ (通常はプロセスを強制終了する) をインターセプト するにはどうすればよいですか?CtrlC
マルチプラットフォーム ソリューションは存在しますか (Linux、Solaris、Windows)?
を使用していますが、必要に応じて、他の方法を使用して標準入力から文字を読み取ることができますConsole
。readLine()
CLI (コマンド ライン インターフェイス) Java アプリケーションで+ (通常はプロセスを強制終了する) をインターセプト するにはどうすればよいですか?CtrlC
マルチプラットフォーム ソリューションは存在しますか (Linux、Solaris、Windows)?
を使用していますが、必要に応じて、他の方法を使用して標準入力から文字を読み取ることができますConsole
。readLine()
Runtime.getRuntime().addShutdownHook(new Thread() {
public void run() { /*
my shutdown code here
*/ }
});
これはシグナルをインターセプトできるはずですが、JVM が完全にシャットダウンする前の中間ステップとしてのみであるため、あなたが気にかけているものではないかもしれません。
SignalHandler
( ) を使用して、 +によってトリガーされるシグナルsun.misc.SignalHandler
をインターセプトする必要があります(Unix と Windows の両方で)。この記事
を参照してください(pdf、ページ 8 および 9)。SIGINT
CtrlC
正常にシャットダウンし、シャットダウン プロセスを短絡させないことを前提としています。私の仮定が正しければ、Shutdown Hooksを見てください。
何らかの理由でシャットダウンせずにCtrl+を処理できるようにするには、何らかの形式のシグナル処理を使用する必要があります ( +入力は実際にはアプリケーションに直接渡されるのではなく、生成する OS によって処理されるため)。 Java に渡される SIGINT。CCtrlC
シグナル処理の詳細については、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 と互換性があると聞いたのを覚えていますが、バージョンによって大きく異なる可能性があります。