如何测试子进程stdout / stderr是否被继承?

时间:2016-03-17 18:20:36

标签: java linux

考虑以下方法:

Process execProcess(String... command) throws IOException {
    ProcessBuilder pb = new ProcessBuilder(command);
    pb.redirectOutput(Redirect.INHERIT);
    pb.redirectError(Redirect.INHERIT);
    return pb.start();
}

我想为execProcess()编写测试,以便测试该方法是否确实输出了继承当前进程的stdout / stderr的进程。这样的事情就是我想要的:

@Test
public void testProcessFDInheritance() {
    Process p = execProcess("echo", "test thing");
    /*
      Check current process' stdout to see if p outputted "test thing"
    */
}

1 个答案:

答案 0 :(得分:1)

原始程序的stdout由启动它的任何进程拥有 - 可能是终端,或某些文件重定向,或管道到另一个进程。

由于您无法控制自己的标准输出,因此解决此问题的唯一方法是在包装过程中启动原始可执行文件。然后,包装器进程可以执行检查以确定它是否看到了特定的输出。

Wrapper启动originaloriginal启动echoecho打印到与original共享的标准输出,wrapperoriginal's标准输出读取"test thing"

相关问题