0

我有一个运行 Java 1.8.0 的 Raspberry Pi 和一个名为 test.jar 的文件。当我运行代码然后使用 Ctrl+Z 停止程序时,Shutdown 钩子不会运行,但是当我在 Windows 上运行代码并停止它时,shutdown 钩子将起作用。

我该如何解决这个问题,谢谢

public class Test
{
    public static void main(String[] args)
    {
        Runtime.getRuntime().addShutdownHook(new Thread()   //Add shutdown code
        {
            public void run()
            {
                System.out.println("Shutdown");
            }
        });

        while(true) { }
    }
}
4

1 回答 1

1

在 linux 终端中, ctrl-z 将 a 发送SIGSTOP到前台进程。这是您在流程中无法处理的两个信号之一(另一个是SIGKILL)。这意味着 java 无法运行任何代码来响应信号。

但是,SIGSTOP无论如何都不会结束该过程,它只是暂停它。您可以通过发送SIGCONT信号来继续它,这可以通过使用fg命令在您的 shell 中实现。

尝试使用ctrl-cinstead 来结束你的程序,它应该可以工作(因为它会发送一个SIGINTinstead,可以处理)。

于 2014-09-20T17:28:02.287 回答