iva*_*off 81 java command-line stdin copy-paste command-line-interface
如何在CLI(命令行界面)Java应用程序中拦截 Ctrl + C(通常会终止进程)?
是否存在多平台解决方案(Linux,Solaris,Windows)?
我使用Console的readLine(),但如果有必要,我会用一些其他的方法来读取从标准输入的字符.
Von*_*onC 118
Runtime.getRuntime().addShutdownHook(new Thread() {
public void run() { /*
my shutdown code here
*/ }
});
Run Code Online (Sandbox Code Playgroud)
这应该能够拦截信号,但仅作为JVM完全关闭之前的中间步骤,因此它可能不是您正在寻找的.
您需要使用a SignalHandler(sun.misc.SignalHandler)来拦截SIGINT由Ctrl+ C(在Unix和Windows上)触发的信号.
请参阅此文章(pdf,第8页和第9页).
为了能够在不关闭的情况下处理Ctrl+ C,你需要使用某种形式的信号处理(因为Ctrl+ C输入实际上并没有直接传递给你的应用程序,而是由产生的OS处理然后传递给Java的SIGINT.
有关信号处理的详细信息,请参见http://www.oracle.com/technetwork/java/javase/signals-139944.html.
(如果你只是想要优雅地关闭,akf的答案就足够了.)
| 归档时间: |
|
| 查看次数: |
59953 次 |
| 最近记录: |