簡體   English   中英

ProcessBulder加載進程但不啟動

[英]ProcessBulder loads the process but doesn't start it

我使用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();
}

我確實在系統監視器中看到子進程已經啟動,但是除非停止主機應用程序,否則子進程將無法運行。 更具體地說,子進程是服務器,並且在使用ProcessBuilder啟動它之后,如果主機應用程序仍在運行,則它不會響應請求。 而且,服務器正在使用的端口仍然可用。 如果我停止主機應用程序,服務器將立即開始工作。 我有什么想念的嗎?或者這就是ProcessBuilder的工作原理嗎? 提前謝謝了。

在大多數情況下,除非清空進程的標准輸出緩沖區,否則它不會終止。 可能是您的進程已填滿此緩沖區並已停止(出於某種原因)

嘗試使用標准Process#getInputStream (通過Process#getInputStream ),看看是否有區別。

也可能是該進程正在等待用戶輸入。

看看我沒有得到任何輸出,可能機器以示例的代碼掛起

@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);
            }
        }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM