Java Process.waitFor()方法詳解
Java Process.waitFor()方法
Process.waitFor()方法 將導致當前線程等待,直到該對象的進程結束,才返回調用。
描述
java.lang.Process.waitFor()方法將導致當前的線程等待,如果必要的話,直到由該Process對象表示的進程已經終止。此方法將立即返回,如果子進程已經終止。如果子進程尚未終止,則調用線程將被阻塞,直到子進程退出。
聲明
以下是java.lang.Process.waitFor()方法的聲明
public abstract int waitFor()
參數
NA
返回值
此方法返回的退出值的過程。按照慣例,0表示正常終止。
異常
NA
實例
下面的例子說明瞭如何使用lang.Process.waitFor()方法。
package com.yiibai; public class ProcessDemo { public static void main(String[] args) { try { // create a new process System.out.println("Creating Process..."); Process p = Runtime.getRuntime().exec("notepad.exe"); // cause this process to stop until process p is terminated p.waitFor(); // when you manually close notepad.exe program will continue here System.out.println("Waiting over."); } catch (Exception ex) { ex.printStackTrace(); } } }
編譯運行結果:
Creating Process…
Waiting over.
process.waitFor()沒有作用
最近在遇到關於視頻需要轉碼 用到ffmpeg 使用cmd運行時,需要在cmd運行成功後進行操作,百度都說使用waitfor()方法,但是總是一閃而過, 沒有起到等待完成的作用..
Process process = Runtime.getRuntime().exec("cmd /c start notepad.exe"); process.waitFor();
java的Runtime.getRuntime().exec(commandStr)可以調用執行cmd指令。
cmd /c dir
是執行完dir命令後關閉命令窗口。cmd /k dir
是執行完dir命令後不關閉命令窗口。cmd /c start dir
會打開一個新窗口後執行dir指令,原窗口會關閉。cmd /k start dir
會打開一個新窗口後執行dir指令,原窗口不會關閉。
這個代碼中的process.waitFor();並沒有起到作用
後面的代碼在調用的notepad.exe還沒結束就繼續運行瞭,
結果發現是因為在exec裡面用瞭start
這樣的後果是process.waitFor()等待的是一個一閃而過的用來打開exe的命令行窗口而已.
去掉start這個詞,就會等到exe結束程序在繼續執行瞭。
以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。
推薦閱讀:
- java.lang.Runtime.exec的左膀右臂:流輸入和流讀取詳解
- Java中Process類的使用與註意事項說明
- 基於Process#waitFor()阻塞問題的解決
- 使用Runtime 調用Process.waitfor導致的阻塞問題
- Java調用Shell命令和腳本的實現