如何理解Process 执行命令行封装类
发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,今天就跟大家聊聊有关如何理解Process 执行命令行封装类,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。进行多次测试后发现是因为没有正常退出
千家信息网最后更新 2026年11月02日如何理解Process 执行命令行封装类
今天就跟大家聊聊有关如何理解Process 执行命令行封装类,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。
进行多次测试后发现是因为没有正常退出进程,以及完全读取掉流数据,和关闭流导致的问题。
在多次优化后,建立如下封装类:
ProcessModel.java
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; /** * Create By Qiujuer * 2014-07-26 * * 执行命令行语句静态方法封装 */ public class ProcessModel { //换行符 private static final String BREAK_LINE; //执行退出命令 private static final byte[] COMMAND_EXIT; //错误缓冲 private static byte[] BUFFER; /** * 静态变量初始化 */ static { BREAK_LINE = "\n"; COMMAND_EXIT = "\nexit\n".getBytes(); BUFFER = new byte[32]; } /** * 执行命令 * * @param params 命令参数 * eg: "/system/bin/ping", "-c", "4", "-s", "100","www.qiujuer.net"
* @return 执行结果 */ public static String execute(String... params) { Process process = null; 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 执行命令行封装类有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注行业资讯频道,感谢大家的支持。
进程
命令
封装
内容
输入
错误
问题
静态
测试
压力
参数
变量
底层
换行符
数据
方法
时候
更多
知识
篇文章
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
咖啡网
互联网科技有限公司
互联网科技园
河南云网互联网络科技有限公司
中关村互联网科技集团
没上市的科技互联网公司
高科技与互联网
广州宏创互联网科技
致聘互联网科技
易通互联网络科技有限公司
互联网科技公司做什么
互联网科技股午盘股票涨跌
互联网教育科技公司vipkid
洛阳昕诺飞互联网科技有限公司
工业互联网等科技实现智能化赋能
互联网科技实习生岗位
易企秀互联网科技是做什么的
杭州科技互联网公司有哪些
上海互联网科技园景观
科技互联网企业在行动
互联网科技活动banner
北京互联网科技公司
恒银科技与互联网金融
晓花互联网科技有限公司网址
中国互联网公司排名锤子科技
南博望互联网科技有限公司
福建互联网展示科技馆设计
互联网科技新闻
西安左小互联网科技有限公司
悟空问答互联网科技