java runtime waitfor 阻塞

来源:互联网 发布:ubuntu安装jdk eclipse 编辑:程序博客网 时间:2024/05/17 02:12
public static String GetResultnew(String command) {        String result = "";        Process p =null;        Runtime rt = Runtime.getRuntime();        try {             p = rt.exec("sh");             //获取进程的标准输入流             final InputStream is1 = p.getInputStream();              //获取进城的错误流             final InputStream is2 = p.getErrorStream();             final OutputStream os = p.getOutputStream();            //启动两个线程,一个线程负责读标准输出流,另一个负责读标准错误流             writeLine( os, null, command);            //writeLine( os, null, "ps ax");            writeLine( os, null, "exit" );            os.close();            new Thread() {                  public void  run() {                      BufferedReader br2 = new  BufferedReader(new  InputStreamReader(is2));                      try {                          String line2 = null ;                          while ((line2 = br2.readLine()) !=  null ) {                              if (line2 != null){                            }                         }                      } catch (IOException e) {                          e.printStackTrace();                     }                      finally{                         try {                             is2.close();                         } catch (IOException e) {                             e.printStackTrace();                         }                     }                 }              }.start();               BufferedReader br1 = new BufferedReader(new InputStreamReader(is1));             try {                String line1 = null;                 while ((line1 = br1.readLine()) != null) {                     if (line1 != null){                        result = result + line1;                    }                 }             } catch (IOException e) {                 e.printStackTrace();             }             finally{                 try {                     is1.close();                 } catch (IOException e) {                     e.printStackTrace();                 }             }             p.waitFor();             p.destroy();              return result;        } catch (Exception e) {             try{                 p.getErrorStream().close();                 p.getInputStream().close();                 p.getOutputStream().close();             }             catch(Exception ee){}         }        return "";    }

接受同事的项目,服务过两天就出问题,最后确认是调用系统命令的地方有问题。以上是修改后的代码。