[英]ProcessBuilder and Process.waitFor(), how long does it wait?
我正在使用ProcessBuilder類和Process類從 java 執行 .exe 文件。 解釋我在做什么:
builder = new ProcessBuilder(commands);
builder.redirectErrorStream(true);
Process process = builder.start();
process.waitFor();
我只是想知道,“waitFor()”要等多久? 是等待我的 .exe 執行,還是等待執行完成?
我的 .exe 是一個編譯的 AutoIt 腳本。 這意味着,可能會有鼠標移動之類的交互,這需要一些時間。 所以我需要知道在調用 .exe 之后我的 Java 代碼執行是否繼續,或者它是否真的在等待它。
我想要實現的是兩個腳本的輪換執行,但恐怕我的 Java 代碼正在執行第二個腳本,而第一個腳本仍在運行。 有沒有人解決這個問題? 我很高興有任何想法。
您當前的執行線程將在process.waitFor()
上被阻塞,直到進程終止(即執行完成)。 來源在這里
另請注意,如果進程已經終止:waitFor() 將不會被阻塞。 我不知道你在你的問題中輸入的代碼是否正是你運行的......但是你必須小心並為你的腳本的每次執行重新創建一個新的 Process 實例(即不僅僅是多次調用 start相同的過程:第一次執行后它不會工作)
此外,如果“命令”中有輸出。 您應該通過stream(process.getErrorStream())
和process.getInputStream())
讀取標准輸出和標准錯誤輸出。如果沒有並且輸出或錯誤輸出已滿,則waitfor()
將被掛起。
它將等到過程完成。 解決方法:
1 使用 isAlive()
2 使用waitFor(long timeout, TimeUnit unit) (僅1.8)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.