重新启动Java应用程序:exec没有';我做不到
我需要做的是启动一个java应用程序,并在需要时重新启动它 附加的实现没有做到这一点重新启动Java应用程序:exec没有';我做不到,java,process,restart,Java,Process,Restart,我需要做的是启动一个java应用程序,并在需要时重新启动它 附加的实现没有做到这一点 StringBuilder cmd = new StringBuilder(); cmd.append(System.getProperty("java.home") + File.separator + "bin" + File.separator + "java "); for (String jvmArg : ManagementFactory.getRuntimeMXBean().getInputArg
StringBuilder cmd = new StringBuilder();
cmd.append(System.getProperty("java.home") + File.separator + "bin" + File.separator + "java ");
for (String jvmArg : ManagementFactory.getRuntimeMXBean().getInputArguments()) {
cmd.append(jvmArg + " ");
}
cmd.append("-cp ").append(ManagementFactory.getRuntimeMXBean().getClassPath()).append(" ");
cmd.append(Main.class.getName()).append(" ");
for (String arg : args) {
cmd.append(arg).append(" ");
}
Runtime.getRuntime().exec(cmd.toString());
System.exit(0);
方法exec()
返回一个进程
,您可以在该进程上调用waitFor()
。这将使旧流程保持活动状态,直到(所有)新流程完成。
我怀疑是因为您立即调用System.exit(0)代码>,新运行的子进程将与父进程一起终止
或者,您可以在命令行脚本中创建一个无限循环(如果您想在每次应用程序终止时重新启动),该循环在bash中运行应用程序,类似于:
#!/bin/bash
while :
do
command_which_starts_your_app
# when the command finishes, new iteration will restart your app
done
然后,如果按Ctrl-C,将取消脚本并重新启动应用程序。或者,您可以使用应用程序的返回值并终止,例如,如果它大于0。当您说“没有这样做”时,您的意思是什么?当您尝试运行该代码时会发生什么情况?请附上您得到的错误。