源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

Android执行shell命令详解

  • 时间:2022-07-21 08:36 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:Android执行shell命令详解
[b]一、方法 [/b]
[u]复制代码[/u] 代码如下:
/**  * 执行一个shell命令,并返回字符串值  *  * @param cmd  * 命令名称&参数组成的数组(例如:{"/system/bin/cat", "/proc/version"})  * @param workdirectory  * 命令执行路径(例如:"system/bin/")  * @return 执行结果组成的字符串  * @throws IOException  */  public static synchronized String run(String[] cmd, String workdirectory)  throws IOException {  StringBuffer result = new StringBuffer();  try {  // 创建操作系统进程(也可以由Runtime.exec()启动)  // Runtime runtime = Runtime.getRuntime();  // Process proc = runtime.exec(cmd);  // InputStream inputstream = proc.getInputStream();  ProcessBuilder builder = new ProcessBuilder(cmd);  InputStream in = null;  // 设置一个路径(绝对路径了就不一定需要)  if (workdirectory != null) {  // 设置工作目录(同上)  builder.directory(new File(workdirectory));  // 合并标准错误和标准输出  builder.redirectErrorStream(true);  // 启动一个新进程  Process process = builder.start();  // 读取进程标准输出流  in = process.getInputStream();  byte[] re = new byte[1024];  while (in.read(re) != -1) {  result = result.append(new String(re));  }  }  // 关闭输入流  if (in != null) {  in.close();  }  } catch (Exception ex) {  ex.printStackTrace();  }  return result.toString();  } 
[b]二、用途 [/b]执行Linux下的top、ps等命令,这些命令你也通过adb可以执行查看效果。 1)top命令如下:
[u]复制代码[/u] 代码如下:
adb shell  $ top -h  top -h  Usage: top [-m max_procs] [-n iterations] [-d delay] [-s sort_column] [-t] [-h]  -m num Maximum number of processes to display. // 最多显示多少个进程  -n num Updates to show before exiting. // 刷新次数  -d num Seconds to wait between updates. // 刷新间隔时间(默认5秒)  -s col Column to sort by <cpu,vss,rss,thr> // 按哪列排序  -t Show threads instead of processes. // 显示线程信息而不是进程  -h Display this help screen. // 显示帮助文档  $ top -n 1  top -n 1 
就不把执行效果放上来了,总之结果表述如下:
[u]复制代码[/u] 代码如下:
User 35%, System 13%, IOW 0%, IRQ 0% // CPU占用率  User 109 + Nice 0 + Sys 40 + Idle 156 + IOW 0 + IRQ 0 + SIRQ 1 = 306 // CPU使用情况  PID CPU% S #THR VSS RSS PCY UID Name // 进程属性  xx xx% x xx xx xx xx xx xx  CPU占用率:  User 用户进程  System 系统进程  IOW IO等待时间  IRQ 硬中断时间  CPU使用情况(指一个最小时间片内所占时间,单位jiffies。或者指所占进程数):  User 处于用户态的运行时间,不包含优先值为负进程  Nice 优先值为负的进程所占用的CPU时间  Sys 处于核心态的运行时间  Idle 除IO等待时间以外的其它等待时间  IOW IO等待时间  IRQ 硬中断时间  SIRQ 软中断时间  进程属性:  PID 进程在系统中的ID  CPU% 当前瞬时所以使用CPU占用率  S 进程的状态,其中S表示休眠,R表示正在运行,Z表示僵死状态,N表示该进程优先值是负数。  #THR 程序当前所用的线程数  VSS Virtual Set Size 虚拟耗用内存(包含共享库占用的内存)  RSS Resident Set Size 实际使用物理内存(包含共享库占用的内存)  PCY OOXX,不知道什么东东  UID 运行当前进程的用户id  Name 程序名称android.process.media  // ps:内存占用大小有如下规律:VSS >= RSS >= PSS >= USS  // PSS Proportional Set Size 实际使用的物理内存(比例分配共享库占用的内存)  // USS Unique Set Size 进程独自占用的物理内存(不包含共享库占用的内存) 
在附件Android系统->android top.txt文件内,自个总结的。 2)执行代码
[u]复制代码[/u] 代码如下:
// top命令  public static final String[] TOP = { "/system/bin/top", "-n", "1" };  // 现在执行top -n 1,我们只需要第二行(用第二行求得CPU占用率,精确数据)  // 第一行:User 35%, System 13%, IOW 0%, IRQ 0% // CPU占用率  // 第二行:User 109 + Nice 0 + Sys 40 + Idle 156 + IOW 0 + IRQ 0 + SIRQ 1 = 306  // // CPU使用情况  public static synchronized String run(String[] cmd) {  String line = "";  InputStream is = null;  try {  Runtime runtime = Runtime.getRuntime();  Process proc = runtime.exec(cmd);  is = proc.getInputStream();  // 换成BufferedReader  BufferedReader buf = new BufferedReader(new InputStreamReader(is));  do {  line = buf.readLine();  // 前面有几个空行  if (line.startsWith("User")) {  // 读到第一行时,我们再读取下一行  line = buf.readLine();  break;  }  } while (true);  if (is != null) {  buf.close();  is.close();  }  } catch (IOException e) {  e.printStackTrace();  }  return line;  }  // 获取指定应用的top命令获取的信息  // PID CPU% S #THR VSS RSS PCY UID Name // 进程属性  // 如果当前应用不在运行则返回null  public static synchronized String run(String[] cmd, String pkgName) {  String line = null;  InputStream is = null;  try {  Runtime runtime = Runtime.getRuntime();  Process proc = runtime.exec(cmd);  is = proc.getInputStream();  // 换成BufferedReader  BufferedReader buf = new BufferedReader(new InputStreamReader(is));  do {  line = buf.readLine();  // 读取到相应pkgName跳出循环(或者未找到)  if (null == line || line.endsWith(pkgName)) {  break;  }  } while (true);  if (is != null) {  buf.close();  is.close();  }  } catch (IOException e) {  e.printStackTrace();  }  return line;  } 
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部