如何在 CLI 应用程序中“拦截”Ctrl+C?

如何在CLI(命令行界面)Java应用程序中拦截+(通常会杀死进程)?CtrlC

是否存在多平台解决方案(Linux,Solaris,Windows)?

我正在使用 's ,但如有必要,我可以使用其他方法从标准输入中读取字符。ConsolereadLine()


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

这应该能够拦截信号,但只是作为JVM完全关闭之前的中间步骤,所以它可能不是你所照顾的。

您需要使用 SignalHandler () 来拦截由 + 触发的信号(在 Unix 和 Windows 上)。
请参阅此文章(pdf,第 8 页和第 9 页)。sun.misc.SignalHandlerSIGINTCtrlC


答案 2

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