[英]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.