2014-09-20 111 views
0

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

如何解决此,由于

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) { } 
    } 
} 
+0

在构造函数中使用无限循环很痛苦...尝试在某些方法中排除while循环。 – xio4 2014-09-20 17:21:18

+0

更改了代码 – oliverjrose99 2014-09-20 17:24:44

+0

您是否尝试在Rasberry中按Ctrl + C而不是Ctrl + Z? – xio4 2014-09-20 17:27:46

回答

1

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

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

尝试使用ctrl-c代替结束您的程序,它应该工作(因为这将发送SIGINT,而不是处理)。

+0

非常感谢, – oliverjrose99 2014-09-20 17:34:48