2014-09-20 109 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