ProcessBulder加载进程但不启动它

时间:2013-03-08 21:24:47

标签: java processbuilder

我使用ProcessBuilder从java应用程序(主机)启动一个新进程(子进程)。像这样:

ProcessBuilder processBuilder = createProcess(commandLine);
processBuilder.directory(new File(baseDir));
processBuilder.redirectErrorStream(true);
Process process = null;
try {
    process = processBuilder.start();
} catch (Exception e) {
    e.printStackTrace();
}

我确实在系统监视器中看到子进程已启动,但除非我停止主机应用程序,否则它无法运行。更具体地说,子proecess是一个服务器,在使用ProcessBuilder启动后,如果主机应用程序仍在运行,它就不会响应请求。此外,服务器正在使用的端口仍然可用。如果我停止主机应用程序,服务器立即开始工作。有什么我错过的或者ProcessBuilder的工作原理是什么? 提前谢谢了。

2 个答案:

答案 0 :(得分:2)

在大多数情况下,在清空进程的标准输出缓冲区之前,它不会终止。可能是您的进程已填充此缓冲区并已停止(由于某种原因)

尝试使用标准流程(通过Process#getInputStream),看看是否有所作为。

也可能是进程正在等待用户的输入。

查看I'm not getting any output and probably the machine hangs with the code示例

答案 1 :(得分:0)

@MadProgrammer是正确的。我能够解决这个问题,我想用代码示例回答我的问题。这也可能对其他人有用。 启动后,您需要使用子进程中的标准。像这样:

        process = processBuilder.start();
        InputStream is = process.getInputStream();
        INputStreamReadr isr = new InputStreamReader(is);
        BufferedReader br = new BufferedReader(isr);
        String line;
        while (!stopProcess) {
            if (br.ready()) {
                line = br.readLine();
                System.out.println(line);
            }
        }