【问题标题】:Java Process Termination - onEnd()?Java 进程终止 - onEnd()?
【发布时间】:2018-02-06 02:54:03
【问题描述】:

当你通过 PID 强制终止进程时:

kill -9 1123

是否有任何方法在进程终止时调用,直到关闭?

【问题讨论】:

    标签: java linux unix process pid


    【解决方案1】:

    对于java,你可以给你的进程添加一个ShutdownHook,当sigterm被发送到这个进程时,ShutdownHook中的代码会在jvm自动关闭之前被执行。

        Runtime.getRuntime().addShutdownHook(new Thread() {
            @Override
            public void run() {
                //your cleanup codes
            }
        });
    

    【讨论】:

    • 嘿,谢谢 :)
    【解决方案2】:

    查看链接以检查两个信号之间的差异以及如何捕获它们等。

    简而言之,sigterm 允许进程在结束前清理他的东西(他的最后遗嘱),但sigkill 不会也不会被您的应用程序捕获! (想象一下程序永远运行且不可阻挡,这将是一团糟)

    补充阅读:

    Why I am not getting signal SIGKILL on kill -9 command in bash?

    https://major.io/2010/03/18/sigterm-vs-sigkill/

    http://www.learnlinux.org.za/courses/build/shell-scripting/ch12s03.html

    【讨论】:

    • 谢谢!我会发布我的结果:)
    猜你喜欢
    • 2015-01-27
    • 2015-10-16
    • 2012-04-24
    • 2013-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-27
    • 2014-04-22
    相关资源
    最近更新 更多