重新启动Java应用程序:exec没有';我做不到

重新启动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

我需要做的是启动一个java应用程序,并在需要时重新启动它

附加的实现没有做到这一点

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。

当您说“没有这样做”时,您的意思是什么?当您尝试运行该代码时会发生什么情况?请附上您得到的错误。