如何在Java进程中等待子进程完成?

如何在Java进程中等待子进程完成?,java,shell,command-line,cmd,Java,Shell,Command Line,Cmd,这基本上就是我要做的:我创建了一个模拟命令行的进程。像这样: private Process getProcess() { ProcessBuilder builder = new ProcessBuilder("C:/Windows/System32/cmd.exe"); Process p = null; try { p = builder.start(); } catch (IOException e1) { e1.print

这基本上就是我要做的:我创建了一个模拟命令行的
进程。像这样:

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
的输入标准输出,并了解何时再次打印提示。不过,这是一个相当脆弱的机制

在任何情况下,您当前根本不使用
cmd
的标准输出,这将导致它很快被阻塞,永远无法恢复。

有帮助吗?(它使用
/bin/bash
,但您应该能够将其替换为
cmd.exe