在 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);
}
}
- 这是实现优雅终止的好方法吗?
- 如何打印捕获到的信号?
最佳答案
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/