Java 关机挂钩问题

Issue with Java Shutdown hook

我的测试代码如下:

public static void main(String[] args) throws IOException, InterruptedException {
        // TODO Auto-generated method stub

        while(true) {
            Runtime.getRuntime().addShutdownHook(new Thread(new Runnable() 
            { 
              public void run() 
              { 
                System.out.println("Shutdown Hook is running !"); 
                System.out.println("Application Terminating ...");
              } 
            })); 
            System.out.println("Running");
        } 
    }

我 运行 eclipse 中的代码,转到调试选项卡,我可以在 运行 中看到它 state.I 右键单击​​ -> 终止。关闭挂钩不会执行。

输出打印:

Running
Running
Running
.
.
.
.
.
.

你处理不了那个案子。似乎 Eclipse 正在发送一个 SIGKILL,它不是正常关闭的一部分,因此无法被捕获。参见

.. 并且 eclipse 不太可能增加发送 nice 'please terminate' 信号的能力(称为 SIGTERM,它会导致 运行 的关闭挂钩),因为 java' s 进程API只有一种退出进程的方法,通过发送SIGKILL实现。

如果您想测试您的关闭挂钩,只需.. 在您自己的应用程序中调用 System.exit(0),您将见证您的关闭挂钩 运行ning.