java runtime waitfor 阻塞

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 "";
    }

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

你可能感兴趣的:(java,阻塞,Runtime,waitfor)