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。

推薦閱讀: