如何理解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)

相关推荐

  • 网络设备配置对比

    技术网络设备配置对比 网络设备配置对比#!/usr/bin
    # _*_ coding: UTF-8 _*_
    # Copyright (c) 2021 GengYu.All rights reserved

    礼包 2021年12月16日
  • 君越怎么样,君越的优点和缺点是什么

    技术君越怎么样,君越的优点和缺点是什么展开全部 1、车体宽大君越怎么样,大气,外形给人一种豪华上档次的感觉。 2、有全新四缸全铝发动机,据说油耗在6.2升/100公里/90公里等速,如果能真的达到这个标准,我感觉应该非

    生活 2021年10月25日
  • 怎样从Oracle到GaussDB的数据迁移

    技术怎样从Oracle到GaussDB的数据迁移今天就跟大家聊聊有关怎样从Oracle到GaussDB的数据迁移,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。 一

    攻略 2021年11月30日
  • C++11:maketuple

    技术C++11:maketuple C++11:make_tuple翻译来自:https://thispointer.com/c11-make_tuple-tutorial-example/
    本文中,我

    礼包 2021年11月23日
  • shellmysql脚本使用教程(shell脚本mysql数据设置分隔符)

    技术如何实现mysql数据收集shell脚本小编给大家分享一下如何实现mysql数据收集shell脚本,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧! #!/bin/shINTERVAL=5PREFIX=

    攻略 2021年12月20日
  • IE8下DIV嵌套出现错误怎么办

    技术IE8下DIV嵌套出现错误怎么办这篇文章给大家分享的是有关IE8下DIV嵌套出现错误怎么办的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。IE8下DIV嵌套出现错误解决方案最近用DIV写了几

    攻略 2021年11月6日