首页 > 解决方案 > 如何从关闭挂钩中以非零退出代码退出?

问题描述

我有一个 javaagent 在应用程序运行时收集某些信息。它还注册了一个关闭钩子,在应用程序退出时将收集的数据与一些黄金数据进行比较,如果比较失败,预计将以非零退出状态退出。

但是,我无法执行此操作,因为调用 System.exit(exitStatus) 似乎会强制应用程序陷入死锁。

有没有办法以非零退出状态从关闭挂钩中退出

我也尝试使用 java.lang.Runtime.halt(exitStatus) 但它似乎没有帮助。回声$?似乎总是指示退出状态为 0

我的申请代码

public class Sample {
    public static void main(String args[]) {
        System.out.println("My code");
    }
}

我的代理代码:

import java.lang.instrument.Instrumentation;
class CompareDataAtTheTimeOfExit extends Thread {
    @Override
    public void run() {
        // If comparison fails exit with 5
    }
}
class Agent {
    public static void premain(String args, Instrumentation inst) throws Exception {
        Runtime r = Runtime.getRuntime();
        r.addShutdownHook(new CompareDataAtTheTimeOfExit());
    }
}

标签: javajavaagentsshutdown-hookexitstatus

解决方案


推荐阅读