如何正常关闭/终止java进程?

时间:2011-07-26 06:10:42

标签: java windows batch-file shutdown-hook

我正在运行一些Java应用程序,我需要从windows bat脚本中优雅地关闭/关闭所有应用程序。 所以我的问题是:
如何通过windows bat脚本调用shutdown hook并正常关闭java程序。

任何建议表示赞赏。 提前谢谢。

3 个答案:

答案 0 :(得分:5)

查看Runtime课程中的addShutdownHook方法。

Runtime.getRuntime().addShutdownHook(...);

更新:根据下面的评论,Windows shell中有一个命令TASKKILL,类似于* nix kill命令。例如,TASKKILL /IM java.exe将终止所有java进程。 TASKLIST可用于查找所有正在运行的进程。将此与shutdownhook结合使用可以为您提供所需的优雅可能性。

答案 1 :(得分:4)

通常通过让所有非守护程序线程正常完成其工作来实现Java中的“优雅”关闭。如果您的应用程序在某个端口上侦听“shutdown”命令,那么您可以让脚本触发该端口的命令,然后您可以使用该命令为线程设置适当的标志以停止工作,让JVM关闭。这可能是我见过它最简单的方法。

答案 2 :(得分:3)

您的.bat脚本将是VM外部的进程。因此,您需要在Java应用程序中实现某种IPC。一些相对简单的选项可能是使用RMI或JMX。

其他可能性是使用一些可以被应用程序监视的文件,并且可以通过.bat脚本进行修改,以便其他进程识别出它需要关闭。