java runtime waitfor 阻塞

本文分享了在接手一个同事的项目后遇到的服务故障问题及其解决过程。通过对系统命令调用部分的修改,解决了服务频繁崩溃的问题。文章详细介绍了如何通过Java调用shell命令,并正确处理标准输出和错误输出。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值