这基本上就是我想要做的:我创建了一个模拟命令行的Process
。像这样:
private Process getProcess() {
ProcessBuilder builder = new ProcessBuilder("C:/Windows/System32/cmd.exe");
Process p = null;
try {
p = builder.start();
} catch (IOException e1) {
e1.printStackTrace();
}
return p;
}
现在我可以用命令“喂养”这个过程:
BufferedWriter p_stdin = new BufferedWriter(
new OutputStreamWriter(process.getOutputStream()));
try {
p_stdin.write("dir"); // Just a sample command
p_stdin.newLine();
p_stdin.flush();
} catch (IOException e) {
e.printStackTrace();
return "Failed to run " + fileName;
}
我现在想做的是等待命令(这是我的进程的子进程)完成。我怎样才能做到这一点?我知道我可以使用 waitFor()
方法等待进程,但是子进程呢?
最佳答案
dir
命令不是子进程,它在 cmd
内部执行。然而,无论如何,这并没有多大关系:从 Java 的角度来看,在子进程中启动的任何其他命令都会表现相同。
要等待 dir
命令完成,您必须解释从 cmd
传入的 stdout 输出,并了解何时再次打印提示。不过,这是一个相当脆弱的机制。
无论如何,您目前根本不使用 cmd
的 stdout,这将导致它很快阻塞,并且永远无法恢复。
关于java - 如何在 Java 进程中等待子进程完成?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18893075/