java - Java 程序的优雅终止和终止信号的记录

标签 java multithreading runtime signals

在 Linux (CentOS 6) 上运行的 Java 8 应用程序中,我希望能够正常终止它并记录捕获信号的类型(SIGTERM、SIGINT、SIGHUP)。

    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. 如何打印捕获到的信号?

最佳答案

Is this a good way to implement graceful termination?

你没有做太多事情,所以优雅并没有什么实际意义。关闭 Hook 确实是处理这些信号的唯一方法。

How can I print out the caught signal?

你不能。该信号在 JVM 级别被捕获。它将运行System#exit(int)(或者更确切地说Shutdown#exit(int))。 JVM 不提供任何您可以使用的额外信息。

关于java - Java 程序的优雅终止和终止信号的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26173204/

相关文章:

java - Spring中的HashMap

java - 从 JAVA 调用 R 以获得卡方统计量和 p 值

c# - 用 ReaderWriterLockSLim 替换 ReaderWriterLock - 麻烦

python - 如何在打印输出中传递RuntimeWarning?

c++ - 如何测试类型转换时间?

java - 如何使用 Maven 创建一个 jar,其中包含每个依赖项的单独文件夹中的依赖项

java - 如何删除和设置小部件(FloatigSearchView)的边框颜色?特别是底部边框颜色

C# 如何在多线程中使用 MemoryStream

java - Android 线程因未知原因停止

java - 计算程序运行时间?