2009-11-13 75 views
2

Java.exe JVM能以某种方式重启吗?如果你有一个运行在DOS shell(不作为服务)的Java程序,那么关闭它,关闭shell并使用不同的Windows进程ID重新启动它自己,然后重新打开它,最干净,最有效的方式是什么?与重载的类路径不同的shell?Java.exe JVM能以某种方式重启它自己吗?

我认为这是不可能的,但我想我应该向别人询问并向他人学习。

注意:如果有人知道Eclipse IDE如何能够很干净地重新启动它,那就是我想要使用的方法。

+0

你的意思是以编程方式从Java代码中重新启动虚拟机? – Jeff 2009-11-13 19:38:20

+0

不一定是编程式的。即时通讯只是寻找最好的想法,因为显然是有很多不同的方式来做到这一点... – djangofan 2009-11-13 21:34:19

回答

5

Java Service Wrapper可以在这里帮助。您可以在其下运行您的Java进程,但不一定是作为服务。您可以定义重新启动特征,如果它退出,Java程序将重新启动(通过System.exit()或致电WrapperManager.restart())。

+0

在我的问题中我特别说“不作为服务运行”。我目前使用这个包装。即时通讯真的寻找一种方法来做到这一点,没有任何形式的正式包装。在我的问题,我想DOS壳作为唯一的包装... – djangofan 2009-11-13 21:38:20

+0

那么,你可以使用这个包装*没有*作为服务运行 – 2009-11-13 21:52:24

+0

嗯...有趣的想法。我没有想到......它可以作为包装中的交互式DOS shell在前台运行吗? – djangofan 2009-11-13 23:56:40

1

最干净和最简单的方法是从DOS批处理文件(或CMD脚本,如果您愿意的话)运行程序。建立一个循环到你的DOS批处理文件。你把一个:label放在开始位置,在你的Java进程下面放一个GOTO label,然后关掉它。如果需要,可以使用Ctrl - C跳出循环。

+0

嗯...你给我一个有趣的想法...如果我能以某种方式向JVM注入致命错误,那么我可以利用-XX:OnError =“; ”选项在jvm死亡后运行批处理文件...但仍然会使旧的DOS控制台保持打开状态。不是很干净。 – djangofan 2009-11-13 21:37:01

+0

这不会做你的关机挂钩无法做的任何事情。 – 2009-11-14 08:24:59

0

创建一个单独的可执行文件,它将进程ID和命令作为命令行参数,等待指定的进程关闭并运行指定的命令。启动该程序,然后退出当前实例。

您可以将该程序嵌入到您的主程序中,并将其复制到临时目录中以执行它,或者将其并入您的程序中。

+0

这是我目前的做法:使用java开始关闭java服务,然后在最后使用java(编程方式)在新shell中启动第二个服务。问题在于,在第一个jvm关闭后,它留下了一个坐在那里的commmand控制台。 – djangofan 2009-11-13 21:40:05

相关问题