我正在尝试从我的 Java 应用程序运行 ApacheDS 实例。
我使用 ScriptWrapper 类的 run()
方法来执行 ApacheDS 附带的脚本来运行它:
public class ScriptWrapper implements Serializable {
private String scriptPath;
protected Process run(List<String> params) throws IOException {
LOGGER.debug("Executing script="+scriptPath);
params.add(0, scriptPath);
if(workDir != null) {
return Runtime.getRuntime().exec(params.toArray(new String[params.size()]), envp.toArray(new String[envp.size()]), new File(workDir));
} else {
return Runtime.getRuntime().exec(params.toArray(new String[params.size()]));
}
}
}
但问题是,当运行此应用程序的 tomcat 终止和/或 ScriptWrapper 被垃圾收集时,ApacheDS 的实例也会终止。如何让它保持活力?
编辑:感谢您的回答。我决定以不同的方式解决这个问题,并使用二进制 ApacheDS 安装附带的脚本守护进程。
最佳答案
您的主进程应该在结束之前等待它的子进程。
对象 Process 有一个方法 waitFor()
。您可以创建一个新线程,然后运行并等待任何其他进程。
关于java - 如何从另一个java应用程序运行一个java应用程序并在主程序返回后保持运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16606583/