【问题标题】:How can I wait for a subprocess to complete in a process in Java?如何在 Java 进程中等待子进程完成?
【发布时间】:2013-09-24 10:38:10
【问题描述】:

这基本上就是我想要做的:我创建了一个模拟命令行的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() 方法等待进程,但是子进程呢??

【问题讨论】:

标签: java shell command-line cmd


【解决方案1】:

dir 命令不是子进程,它在cmd 内部执行。但是,无论如何,这并不重要:从 Java 的角度来看,在子进程中启动的任何其他命令的行为都是相同的。

要等待dir 命令完成,您必须解释来自cmd 的传入stdout 输出,并了解何时再次打印提示。不过,这是一个非常脆弱的机制。

无论如何,您目前根本不使用cmd 的标准输出,这将导致它很快阻塞,永远无法恢复。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-02
    • 1970-01-01
    • 2010-11-06
    相关资源
    最近更新 更多