簡體   English   中英

ProcessBuilder和Process.waitFor(),等了多久?

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

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