2014-10-03 68 views
1

在Linux(CentOS 6)上運行的Java 8應用程序中,我希望能夠正常終止它並記錄捕獲信號的類型(SIGTERM,SIGINT,SIGHUP) 。Java程序的優雅終止和終止信號的記錄

private static volatile boolean die = false; 

    public static void main(String[] args) throws InterruptedException 
    { 

      // Catch terminate signals 
      Runtime.getRuntime().addShutdownHook(
        new Thread() 
        { 
          @Override 
          public void run() 
          { 
            System.out.println("Caught signal " + ???); 
            die = true; 
            System.exit(1); 
          } 
        } 
      ); 


      int i = 0; 
      while (true && !die) { 
        System.out.println("Test " + i++); 
        Thread.sleep(4000); 
      } 

      if (die) { 
        System.out.println("Dying..."); 
        Runtime.getRuntime().halt(1); 
      } 
} 
  1. 這是實現正常終止的好辦法?
  2. 如何打印出捕捉到的信號?

回答

1

這是實施優美終止的好方法嗎?

你沒有太多的工作,所以優雅並不意味着什麼。關機掛鉤確實是處理這些信號的唯一方法。

如何打印出捕獲的信號?

你不行。該信號在JVM級別捕獲。它會運行System#exit(int)(或更確切地說Shutdown#exit(int))。 JVM不提供任何您可以使用的額外信息。