1

我从这里有这个示例应用程序

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>

但是由于这些信号,我没有足够的时间在关闭应用程序之前进行操作。

我的应用程序中使用了几个线程和一个 JNI Wrapper,什么会导致在 kill -TERM 上未调用 shutdownHook 的问题?

我需要这个,因为我的应用程序使用网络协议,我可以在其中订阅变量。这个句柄必须在关闭之前取消订阅,否则服务器会因为一段时间后的句柄过多而耗尽内存(服务器不在我的控制范围内!)

4

0 回答 0