我从here
获得此示例应用程序public class ExampleSignalHandler {
public static void main(String... args) throws InterruptedException {
final long start = System.nanoTime();
Runtime.getRuntime().addShutdownHook(new Thread(new Runnable() {
public void run() {
System.out.format("\nProgram execution took %f seconds\n", (System.nanoTime() - start) / 1e9f);
}
}));
int counter = 0;
while(true) {
System.out.println(counter++);
Thread.sleep(500);
}
}
}
这很好用,但是如果我在我现在的应用程序中执行此操作,则不会在
上执行kill -TERM <pid>
但是
kill -1 <pid>
kill -KILL <pid>
但是有了这些信号,我在关闭应用程序之前没有足够的时间来完成我的操作。
我的应用程序中使用了一些Threads和JNI Wrapper,这会导致kill -TERM上没有调用shutdownHook的问题?
我需要这个,因为我的应用程序使用网络协议,我可以订阅变量。这个句柄必须在关闭之前取消订阅,否则服务器会因为一段时间后句柄太多而耗尽内存(服务器不在我的控制之下!)