Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何正常关闭/终止java进程?_Java_Windows_Batch File_Shutdown Hook - Fatal编程技术网

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

如何正常关闭/终止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中的“优雅”关闭通常是通过让所有非守护

我正在运行一些java应用程序,需要从windows bat脚本正常关闭所有应用程序。 所以我的问题是:
如何通过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库。这是关于在关机时调用线程,但不会触发关机本身。