处理进程是否被外部终止

chu*_*mak 6 java multithreading sigkill kill-process shutdown-hook

我正在编写一个程序,在一个进程中创建多个线程。

我需要处理如果进程被某人使用kill -9信号或Ctrl + C从外部终止,我的程序应该在关闭之前执行一些操作,例如它应该将进程的状态更改为数据库中的中止。

我该如何处理?

我需要addShutdownHook()?或者还有其他更好的解决方案来解决我的问题吗?

我已经添加了 :

Runtime.getRuntime().addShutdownHook( new Thread() {

            @Override
            public void run() {
                logger.info( "Running Shutdown Hook" );
                //call some method
                System.out.println( "Running Shutdown Hook" );
            }
        } );
Run Code Online (Sandbox Code Playgroud)

在我的主要方法中,但它似乎不起作用。

Gho*_*ica 2

简短的回答:可能行不通。

请参阅 JavaDoc 了解addShutdownHook()

在极少数情况下,虚拟机可能会中止,即停止运行而不完全关闭。当虚拟机从外部终止时会发生这种情况,例如 Unix 上的 SIGKILL 信号或 Microsoft Windows 上的 TerminateProcess 调用...如果虚拟机中止,则无法保证是否会运行任何关闭挂钩。

换句话说:关闭挂钩并不是满足您的要求的可靠选择。