2013-12-16 107 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用于正常完成
相关问题