我正在运行一些Java应用程序,我需要从windows bat脚本中优雅地关闭/关闭所有应用程序。
所以我的问题是:
如何通过windows bat脚本调用shutdown hook并正常关闭java程序。
任何建议表示赞赏。 提前谢谢。
答案 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脚本进行修改,以便其他进程识别出它需要关闭。