我怎么可以 拦截 Ctrl+C (通常会杀死的过程) 在CLI(命令线路接口)Java应用程序?

不会的多平台方案存在(Linux,Solaris、视窗)?

我在使用 Console's readLine(), 但如果有必要,我可以使用一些其他的方法 阅读字从标准输入。

有帮助吗?

解决方案

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

这应该能够拦截信号,但只是作为一个中间步骤之前JVM完全关闭自己,因此它不可能是你在找什么之后。

你需要使用一个 SignalHandler (sun.misc.SignalHandler)截取的 SIGINT 触发的信号 Ctrl+C (Unix以及在Windows)。
看看 这篇文章 (pdf,page8和9)。

其他提示

我假设您要优雅地关闭,而不是将关机过程短路。如果我的假设是正确的,那么你应该看看关机挂钩

为了能够处理 Ctrl + C 而不关闭由于某种原因,你需要使用某种形式的信号处理(因为 Ctrl + C 输入实际上并未直接传递给您的应用程序,而是由生成SIGINT然后传递给Java的操作系统处理。

请参阅 http://www.oracle.com/technetwork/有关信号处理的详细信息,请参阅java / javase / signals-139944.html

(如果你只是想要优雅地关闭,akf的答案就足够了。)

有关如何处理SIGTERM的一些链接 - 这是程序在操作系统端获得的信号:

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

http://java.sun的.com / JavaSE的/ 6 / webnotes /麻烦/ TSG-VM / HTML / signals.html

http://www.ibm.com/developerworks/java/库/ I-signalhandling /

这应该适用于POSIX操作系统 - 也就是说,Mac和Unix应该可以工作,在Windows上我不确定,我记得听说它在某种程度上也兼容POSIX,但可能会因不同的版本而大量出现。 / p>

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top