3

跟进上一个问题

如果你读过上一个问题,另一个标题可能是:
我的守护进程应该多久检查一次它是否被中断?

4

2 回答 2

7

当 JVM 收到退出信号时,它会运行一个关闭进程,该进程启动所有关闭挂钩线程,然后等待它们完成。由操作系统决定等待多长时间,这取决于用于启动进程终止的方法。您可以使用一个简单的测试程序自己尝试一下,例如:

public static void main ( String[] args ) throws InterruptedException {
    Runtime.getRuntime ().addShutdownHook ( new Thread () {
        @Override
        public void run () {
            System.out.println ( "Shutdown hook" );
            while ( true ) { }
        }
    } );

    while ( true ) {
        System.out.println ( "Looping" );
        Thread.sleep ( 10000 );
    }
}

如果您使用 ctrl+c 向进程发出信号,则该进程将启动关闭挂钩,但永远不会完成。如果您删除了关闭挂钩中的繁忙循环,您将看到它在挂钩完成时终止。

于 2011-12-29T19:47:17.070 回答
3

jvm 执行关机。宽限时间基于操作系统和 AFAIK,我们没有任何控制来配置它。

于 2011-12-29T02:39:51.757 回答