如何理解Process 执行命令行封装类

技术如何理解Process 执行命令行封装类今天就跟大家聊聊有关如何理解Process 执行命令行封装类,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。进行多次测试

今天跟大家聊聊如何理解Process execution命令行封装类,很多人可能不太懂。为了让大家更好的了解,边肖为大家总结了以下内容,希望大家能从这篇文章中有所收获。

经过多次测试,发现问题是由于没有正常退出进程,完全读出流数据,关闭流导致的。

经过多次优化,建立了以下封装类:

ProcessModel.java

import Java . io . bufferedreader;import Java . io . ioexception;import Java . io . InputStream;import Java . io . InputStreamReader;import Java . io . OutputStream;/* * * createbychuju * 2014-07-26 * p/*执行命令行语句的静态方法封装*/publicclassProcessModel {//new line字符privatesticfinalistringbreak _ line;//执行exit命令privatedstatifinbyte[]command _ exit;//Error BUFFER private static byte[]BUFFER;/* * *静态变量初始化*/静态{ BREAK _ LINE=' \ nCOMMAND _ EXIT=' \ nexit \ n '。getBytes();BUFFER=new byte[32];}/* * *执行命令* * @ * * @ paramparams命令参数* pree g 3360 '/system/bin/ping ','-c ',' 4 ','-s ',' 100 ',' www . jujuer . net '/pre * @返回执行结果*/public nb

sp;        StringBuilder sbReader = null;            BufferedReader bReader = null;         InputStreamReader isReader = null;            InputStream in = null;         InputStream err = null;         OutputStream out = null;            try {             process = new ProcessBuilder()                     .command(params)                     .start();             out = process.getOutputStream();             in = process.getInputStream();             err = process.getErrorStream();                out.write(COMMAND_EXIT);             out.flush();                process.waitFor();                isReader = new InputStreamReader(in);             bReader = new BufferedReader(isReader);                String s;             if ((s = bReader.readLine()) != null) {                 sbReader = new StringBuilder();                 sbReader.append(s);                 sbReader.append(BREAK_LINE);                 while ((s = bReader.readLine()) != null) {                     sbReader.append(s);                     sbReader.append(BREAK_LINE);                 }             }                while ((err.read(BUFFER)) > 0) {             }         } catch (IOException e) {             e.printStackTrace();         } catch (Exception e) {             e.printStackTrace();         } finally {             closeAllStream(out, err, in, isReader, bReader);                if (process != null) {                 processDestroy(process);                 process = null;             }         }            if (sbReader == null)             return null;         else             return sbReader.toString();     }        /**      * 关闭所有流      *      * @param out      输出流      * @param err      错误流      * @param in       输入流      * @param isReader 输入流封装      * @param bReader  输入流封装      */     private static void closeAllStream(OutputStream out, InputStream err, InputStream in, InputStreamReader isReader, BufferedReader bReader) {         if (out != null)             try {                 out.close();             } catch (IOException e) {                 e.printStackTrace();             }         if (err != null)             try {                 err.close();             } catch (IOException e) {                 e.printStackTrace();             }         if (in != null)             try {                 in.close();             } catch (IOException e) {                 e.printStackTrace();             }         if (isReader != null)             try {                 isReader.close();             } catch (IOException e) {                 e.printStackTrace();             }         if (bReader != null)             try {                 bReader.close();             } catch (IOException e) {                 e.printStackTrace();             }     }           /**      * 通过Android底层实现进程关闭      *      * @param process 进程      */     private static void killProcess(Process process) {         int pid = getProcessId(process);         if (pid != 0) {             try {                 //android kill process                 android.os.Process.killProcess(pid);             } catch (Exception e) {                 try {                     process.destroy();                 } catch (Exception ex) {                 }             }         }     }        /**      * 获取进程的ID      *      * @param process 进程      * @return      */     private static int getProcessId(Process process) {         String str = process.toString();         try {             int i = str.indexOf("=") + 1;             int j = str.indexOf("]");             strstr = str.substring(i, j);             return Integer.parseInt(str);         } catch (Exception e) {             return 0;         }     }        /**      * 销毁进程      *      * @param process 进程      */     private static void processDestroy(Process process) {         if (process != null) {             try {                 //判断是否正常退出                 if (process.exitValue() != 0) {                     killProcess(process);                 }             } catch (IllegalThreadStateException e) {                 killProcess(process);             }         }     } }

在进行批量压力测试到达125643个线程的时候都没有出现此问题。

看完上述内容,你们对如何理解Process 执行命令行封装类有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注行业资讯频道,感谢大家的支持。

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/84215.html

(0)

相关推荐

  • openjdk11和oraclejdk11的区别(oracle jdk 和open jdk差别大吗)

    技术Oracle,Open JDK等四大JVM性能对比的示例分析这篇文章将为大家详细讲解有关Oracle,Open JDK等四大JVM性能对比的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后

    攻略 2021年12月17日
  • linux ubuntu怎么安装mysql

    技术linux ubuntu怎么安装mysql这篇文章主要讲解了“linux ubuntu怎么安装mysql”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“linux ub

    攻略 2021年11月26日
  • php怎么实现下载进度条

    技术php怎么实现下载进度条本篇内容主要讲解“php怎么实现下载进度条”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“php怎么实现下载进度条”吧!

    攻略 2021年10月28日
  • 怎样解读Java Spring AOP

    技术怎样解读Java Spring AOP本篇文章为大家展示了怎样解读Java Spring AOP,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。一、对AOP的初印象首先先给出一

    攻略 2021年12月3日
  • 24 二级视图

    技术24 二级视图 24 二级视图和一级视图相比:GenericAPIView来自 :from rest_framework.generics import GenericAPIView新增:字段:  

    礼包 2021年11月4日
  • 真丝裙,真丝裙贱上水就有痕迹怎么办

    技术真丝裙,真丝裙贱上水就有痕迹怎么办真丝绸的一个特性就是局部沾水后容易形成水渍痕迹。这是真丝纤维本身亲水性太强、局部在沾水后真丝裙,纤维大分子沾到水的部位,水分子跟纤维上的亲水性基团比如羟基(-OH)、氨基(-NH)发

    生活 2021年10月30日