当有人通过taskmanager或taskkill控制台命令杀死我的应用程序(java,但这并不重要)时,如何捕捉?

我了解我无法在我的应用程序中捕获此错误,但是也许可以通过与OS(当然是Windows)挂钩来完成此操作。也许easyhook库(http://www.codeplex.com/easyhook)可以帮到我,但是我在那里找不到示例。
我们的应用程序经常在客户服务器上死机,我只想知道是谁(或什么)杀死了它。我们确定这不是应用程序问题,似乎java.exe进程已从taskmanager中杀死

最佳答案

你可以这样做:

Runtime.getRuntime().addShutdownHook(new Thread() {
  public void run() {
    // run some code
  }
});

如果VM在 native 代码中崩溃,则不会调用它。如果VM停止,也不会调用它。它也没有告诉您为什么它也关闭了。参见Design of the Shutdown Hooks API。我认为您无法获得更多的信息。

过去,我经常使用Java Service Wrapper。它是一个独立的进程,用于启动和重新启动Java进程,并记录它们的输出,如果异常意外终止了该进程,这将非常有用。

10-04 11:05
查看更多