【问题标题】:Issue with Java Shutdown hook [duplicate]Java Shutdown hook 的问题 [重复]
【发布时间】:2020-06-10 13:40:08
【问题描述】:

我的测试代码如下:

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 中运行代码,转到调试选项卡,在那里我可以看到它处于运行状态。我右键单击 -> 终止。关闭挂钩不会执行。

打印输出:

Running
Running
Running
.
.
.
.
.
.

【问题讨论】:

标签: java shutdown-hook


【解决方案1】:

你无法处理这种情况。似乎 Eclipse 正在发送一个 SIGKILL,它不是正常关闭的一部分,因此无法被捕获。见https://stackoverflow.com/a/2541618/3560873

【讨论】:

    【解决方案2】:

    .. 并且 Eclipse 不太可能增加发送“请终止”信号的能力(称为 SIGTERM,它会导致关闭挂钩运行),因为 java 的 Process API 只有一种退出进程的方法,并且这是通过发送 SIGKILL 来实现的。

    如果您想测试您的关闭挂钩,只需.. 在您自己的应用程序中调用 System.exit(0),您就会看到您的关闭挂钩正在运行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-09-23
      • 2022-08-23
      • 1970-01-01
      • 1970-01-01
      • 2012-08-04
      • 1970-01-01
      • 1970-01-01
      • 2021-04-08
      相关资源
      最近更新 更多