2013-12-16 108 views
1

我正在向Servlet發送請求。在那個Servlet中,我有一個執行終端並在那裏運行一些命令的代碼。我希望我的代碼在響應我的請求之前等待終端進​​程。我如何管理它?在繼續執行代碼之前等待終端結果

下面你可以看到我的代碼:

Process send = Runtime.getRuntime().exec(new String[] {"sh", "-c", fileNameShort + ".jar /tmp/"+ fileNameShort +".class; /home/ubuntu/android-x86.rund.sh -cp /tmp/"+ fileNameShort +".jar " + fileNameShort}); 
+0

您必須從Process獲取'OutputStream'和'ErrorStream'。任何寫入普通STDOUT的內容都會傳送到OutputStream,寫入STDERR的任何內容都會傳送到ErrorStream。有關更多信息,請參閱JavaDoc on Process:http://docs.oracle.com/javase/6/docs/api/java/lang/Process.html – CodeChimp

+0

您是否知道'Process send = Runtime.getRuntime()。exec (new String [] {「sh」,「-c」,fileNameShort +「.jar/tmp /」+ fileNameShort +「。class; /home/ubuntu/android-x86.rund.sh -cp/tmp /」+ fileNameShort +「。jar」+ fileNameShort});'將在服務器端終端執行 – SpringLearner

+0

@JqueryLearner是它在服務器端終端執行。我希望我的服務器響應等待該進程。 – birdcage

回答

2

您可以使用Process#waitFor()

System.out.println("Waiting for process..."); 
send.waitFor(); 
+0

當我寫send.waitFor();它顯示了在該行的錯誤多個標記 \t - 未處理的異常類型InterruptedException的 \t - 行斷點:UploadImage [線:258] - 的doPost(HttpServletRequest的, \t HttpServletResponse的) – birdcage

+0

我希望你知道如何處理它..谷歌你的例外*,你會發現它。 – Maroun

+1

try-catch塊解決了這個問題。 – birdcage

0
Process process = Runtime.getRuntime().exec("tasklist"); 
BufferedReader reader = 
    new BufferedReader(new InputStreamReader(process.getInputStream())); 
BufferedReader reader = 
    new BufferedReader(new InputStreamReader(process.getErrorStream())); 
System.out.println("Waiting for process completion.."); 
int exitValue = process.waitFor(); 
System.out.println("Process is done.."); 
  1. 方法是waitFor()使您等待過程來完成。
  2. ErrorStreamInoutStream使得能夠獲得執行的輸出&誤差分別
  3. exitValue表示處理完成的方式。 exitValue 0用於正常完成
相關問題