どのようにすることができますI(通常はプロセスを殺す)インターセプトはCtrl +C CLI(コマンドラインインタフェース)、Javaアプリケーションで ?CLIアプリケーションでCtrl + Cを「インターセプト」するにはどうすればよいですか?
マルチプラットフォームソリューション(Linux、Solaris、Windows)はありますか?
私はConsole
のreadLine()
を使用していますが、必要に応じて他の方法 を使用して標準入力から文字を読み取ることができます。
どのようにすることができますI(通常はプロセスを殺す)インターセプトはCtrl +C CLI(コマンドラインインタフェース)、Javaアプリケーションで ?CLIアプリケーションでCtrl + Cを「インターセプト」するにはどうすればよいですか?
マルチプラットフォームソリューション(Linux、Solaris、Windows)はありますか?
私はConsole
のreadLine()
を使用していますが、必要に応じて他の方法 を使用して標準入力から文字を読み取ることができます。
Runtime.getRuntime().addShutdownHook(new Thread() {
public void run() { /*
my shutdown code here
*/ }
});
これは、信号を傍受することができるはずですが、JVM前の中間ステップは、完全に自分自身をシャットダウンだけとして、それはあなたが後に探しているものではないかもしれません。
あなたははCtrl +C(Unix上だけでなく、Windowsの場合)によってトリガSIGINT
信号を傍受するSignalHandler
(sun.misc.SignalHandler
)を使用する必要があります。
this article(pdf、8および9ページ)を参照してください。
正常にシャットダウンし、シャットダウンプロセスを短絡しないと仮定しています。私の前提が正しければ、Shutdown Hooksを見てください。
以前はシャットダウンフックについて聞いたことがありません。ありがとうございました! –
CCtrlキーを+ を扱うことができるようにするために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がうまくいくはずです、わかりませんが、私はPOSIXとの互換性もあると聞いて覚えていますが、バージョン。
2番目のリンクが失敗します。 (http://www.oracle.com/technetwork/java/javase/tsg-vm-149989.pdf)からOracleに変更されましたか? – chance
第3リンクも失敗する –
リンクが死んでいます... –
@MartijnCourteauxそれは5年後に起こります;)そのトピックに関する同様の情報源を見つけて、それに従ってリンクを変更しました。 – VonC
@VonC - それはまた死んだ – GurV