如何正常关闭/终止java进程?
我正在运行一些java应用程序,需要从windows bat脚本正常关闭所有应用程序。 所以我的问题是:如何正常关闭/终止java进程?,java,windows,batch-file,shutdown-hook,Java,Windows,Batch File,Shutdown Hook,我正在运行一些java应用程序,需要从windows bat脚本正常关闭所有应用程序。 所以我的问题是: 如何通过WindowsBAT脚本调用shutdownHook并优雅地关闭java程序 如有任何建议,我们将不胜感激。 提前感谢。您的.bat脚本将是VM外部的进程。因此,您需要在java应用程序中实现某种IPC。一些相对简单的选项可以使用RMI或JMX 另一种可能是使用应用程序可以监视并且可以被.bat脚本修改的文件,以便其他进程识别它需要关闭。Java中的“优雅”关闭通常是通过让所有非守护
如何通过WindowsBAT脚本调用shutdownHook并优雅地关闭java程序 如有任何建议,我们将不胜感激。
提前感谢。您的.bat脚本将是VM外部的进程。因此,您需要在java应用程序中实现某种IPC。一些相对简单的选项可以使用RMI或JMX 另一种可能是使用应用程序可以监视并且可以被.bat脚本修改的文件,以便其他进程识别它需要关闭。Java中的“优雅”关闭通常是通过让所有非守护进程线程正常完成其工作来实现的。如果您让应用程序在某个端口上侦听“shutdown”命令,那么您可以让脚本将该命令触发到该端口,然后您可以使用该端口为线程设置适当的标志以停止工作,从而让JVM关闭。这可能是我见过的最简单的方法。看看
运行时类中的方法
Runtime.getRuntime().addShutdownHook(...);
更新:根据下面的注释,windows shell中有一个类似于*nix kill命令的命令TASKKILL。例如,TASKKILL/IM java.exe
将终止所有java进程<代码>任务列表
可用于查找所有正在运行的进程。将其与shutdownhook结合使用应该会提供所需的优雅可能性。Java 7(尚未发布)有一个文件监视API,现在您可以使用开源JNotify库。这是关于在关机时调用线程,但不会触发关机本身。