当有人杀死java.exe进程时,我怎么能抓住时机?

时间:2009-12-14 12:12:01

标签: java

控制台java应用程序。有人通过任务管理器杀死java.exe进程。在应用程序终止之前,如何写入记录某些信息?

Thread.currentThread().setUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {
    public void uncaughtException(Thread t, Throwable e) { ..... }
}); 

OR

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

不要在这种情况下执行

5 个答案:

答案 0 :(得分:6)

这是不可能的。关机挂钩只能在orderly shutdown

中执行
  

在极少数情况下虚拟   机器可能会中止,即停止   在没有干净地关闭的情况下跑步。   这在虚拟机时发生   例如,在外部终止   使用Unix上的SIGKILL信号或   对Microsoft的TerminateProcess调用   视窗。

您可以发送另一个触发有序关机的信号,例如SIGINT。在应用程序没有响应后,杀死应用程序应该是最后的手段。

答案 1 :(得分:3)

已经提出了一些实用的解决方案,但另一个是在彼此监控的 2 应用程序之间打一个“最后状态”消息。当一个人死亡时,另一个人将最后收到的消息写入日志文件。用户无法使用任务管理器快速终止这两个进程。

答案 2 :(得分:2)

某种解决方案是始终将某些内容写入日志文件。这样你就可以看到Java程序的“最后一口气”。

答案 3 :(得分:2)

您可能尝试使用CreateProcess(在Windows中)通过一个小的天真(例如c ++)应用程序启动java.exe,然后此应用程序将继续运行监视java进程句柄。如果java进程消失了,它可以记录它。

答案 4 :(得分:1)

让您的用户有条不紊地关闭系统,并告诉他们停止使用任务管理器这样做。