Android执行shell命令

一、方法
  1. /**
  2. * 执行一个shell命令,并返回字符串值
  3. *
  4. * @param cmd
  5. * 命令名称&参数组成的数组(例如:{"/system/bin/cat", "/proc/version"})
  6. * @param workdirectory
  7. * 命令执行路径(例如:"system/bin/")
  8. * @return 执行结果组成的字符串
  9. * @throws IOException
  10. */
  11. public static synchronized String run(String[] cmd, String workdirectory)
  12. throws IOException {
  13. StringBuffer result = new StringBuffer();
  14. try {
  15. // 创建操作系统进程(也可以由Runtime.exec()启动)
  16. // Runtime runtime = Runtime.getRuntime();
  17. // Process proc = runtime.exec(cmd);
  18. // InputStream inputstream = proc.getInputStream();
  19. ProcessBuilder builder = new ProcessBuilder(cmd);
  20. InputStream in = null;
  21. // 设置一个路径(绝对路径了就不一定需要)
  22. if (workdirectory != null) {
  23. // 设置工作目录(同上)
  24. builder.directory(new File(workdirectory));
  25. // 合并标准错误和标准输出
  26. builder.redirectErrorStream(true);
  27. // 启动一个新进程
  28. Process process = builder.start();
  29. // 读取进程标准输出流
  30. in = process.getInputStream();
  31. byte[] re = new byte[1024];
  32. while (in.read(re) != -1) {
  33. result = result.append(new String(re));
  34. }
  35. }
  36. // 关闭输入流
  37. if (in != null) {
  38. in.close();
  39. }
  40. } catch (Exception ex) {
  41. ex.printStackTrace();
  42. }
  43. return result.toString();
  44. }
二、用途
         执行Linux下的top、ps等命令,这些命令你也通过adb可以执行查看效果。
         1)top命令如下:
  1. adb shell
  2. $ top -h
  3. top -h
  4. Usage: top [-m max_procs] [-n iterations] [-d delay] [-s sort_column] [-t] [-h]
  5. -m num  Maximum number of processes to display. // 最多显示多少个进程
  6. -n num  Updates to show before exiting. // 刷新次数
  7. -d num  Seconds to wait between updates. // 刷新间隔时间(默认5秒)
  8. -s col  Column to sort by <cpu,vss,rss,thr> // 按哪列排序
  9. -t      Show threads instead of processes. // 显示线程信息而不是进程
  10. -h      Display this help screen. // 显示帮助文档
  11. $ top -n 1
  12. top -n 1
 
         就不把执行效果放上来了,总之结果表述如下:
  1. User 35%, System 13%, IOW 0%, IRQ 0% // CPU占用率
  2. User 109 + Nice 0 + Sys 40 + Idle 156 + IOW 0 + IRQ 0 + SIRQ 1 = 306 // CPU使用情况
  3. PID CPU% S #THR VSS RSS PCY UID Name // 进程属性
  4. xx  xx% x   xx  xx  xx  xx  xx   xx
  5. CPU占用率:
  6. User    用户进程
  7. System  系统进程
  8. IOW IO等待时间
  9. IRQ 硬中断时间
  10. CPU使用情况(指一个最小时间片内所占时间,单位jiffies。或者指所占进程数):
  11. User    处于用户态的运行时间,不包含优先值为负进程
  12. Nice    优先值为负的进程所占用的CPU时间
  13. Sys 处于核心态的运行时间
  14. Idle    除IO等待时间以外的其它等待时间
  15. IOW IO等待时间
  16. IRQ 硬中断时间
  17. SIRQ    软中断时间
  18. 进程属性:
  19. PID 进程在系统中的ID
  20. CPU%    当前瞬时所以使用CPU占用率
  21. S   进程的状态,其中S表示休眠,R表示正在运行,Z表示僵死状态,N表示该进程优先值是负数。
  22. #THR    程序当前所用的线程数
  23. VSS Virtual Set Size 虚拟耗用内存(包含共享库占用的内存)
  24. RSS Resident Set Size 实际使用物理内存(包含共享库占用的内存)
  25. PCY OOXX,不知道什么东东
  26. UID 运行当前进程的用户id
  27. Name    程序名称android.process.media
  28. // ps:内存占用大小有如下规律:VSS >= RSS >= PSS >= USS
  29. // PSS  Proportional Set Size 实际使用的物理内存(比例分配共享库占用的内存)
  30. // USS  Unique Set Size 进程独自占用的物理内存(不包含共享库占用的内存)

在附件Android系统->android top.txt文件内,自个总结的。

         2)执行代码
  1. // top命令
  2. public static final String[] TOP = { "/system/bin/top", "-n", "1" };
  3. // 现在执行top -n 1,我们只需要第二行(用第二行求得CPU占用率,精确数据)
  4. // 第一行:User 35%, System 13%, IOW 0%, IRQ 0% // CPU占用率
  5. // 第二行:User 109 + Nice 0 + Sys 40 + Idle 156 + IOW 0 + IRQ 0 + SIRQ 1 = 306
  6. // // CPU使用情况
  7. public static synchronized String run(String[] cmd) {
  8. String line = "";
  9. InputStream is = null;
  10. try {
  11. Runtime runtime = Runtime.getRuntime();
  12. Process proc = runtime.exec(cmd);
  13. is = proc.getInputStream();
  14. // 换成BufferedReader
  15. BufferedReader buf = new BufferedReader(new InputStreamReader(is));
  16. do {
  17. line = buf.readLine();
  18. // 前面有几个空行
  19. if (line.startsWith("User")) {
  20. // 读到第一行时,我们再读取下一行
  21. line = buf.readLine();
  22. break;
  23. }
  24. } while (true);
  25. if (is != null) {
  26. buf.close();
  27. is.close();
  28. }
  29. } catch (IOException e) {
  30. e.printStackTrace();
  31. }
  32. return line;
  33. }
  34. // 获取指定应用的top命令获取的信息
  35. // PID CPU% S #THR VSS RSS PCY UID Name // 进程属性
  36. // 如果当前应用不在运行则返回null
  37. public static synchronized String run(String[] cmd, String pkgName) {
  38. String line = null;
  39. InputStream is = null;
  40. try {
  41. Runtime runtime = Runtime.getRuntime();
  42. Process proc = runtime.exec(cmd);
  43. is = proc.getInputStream();
  44. // 换成BufferedReader
  45. BufferedReader buf = new BufferedReader(new InputStreamReader(is));
  46. do {
  47. line = buf.readLine();
  48. // 读取到相应pkgName跳出循环(或者未找到)
  49. if (null == line || line.endsWith(pkgName)) {
  50. break;
  51. }
  52. } while (true);
  53. if (is != null) {
  54. buf.close();
  55. is.close();
  56. }
  57. } catch (IOException e) {
  58. e.printStackTrace();
  59. }
  60. return line;
  61. }
三、后记
         这次相关的仅有的那个工程好像不能放上来了==。
 
         好吧,把我当时整理的一点点相关资料放附件了:包含《Android系统》文件夹和《深入研究java.lang.ProcessBuilder类.doc》。
         文件夹内容如下:

         ps:现在有个可以看的小工程了,请移至《Android VNC Server New》!
 
 

附件:http://down.51cto.com/data/2359794

Android执行shell命令 top ps的更多相关文章

  1. Android执行shell命令

    一.方法 /** * 执行一个shell命令,并返回字符串值 * * @param cmd * 命令名称&参数组成的数组(例如:{"/system/bin/cat", &q ...

  2. Android Java执行Shell命令

    最新内容建议直接访问原文:http://www.trinea.cn/android/android-java-execute-shell-commands/ 主要介绍Android或Java应用中如何 ...

  3. 用crontab执行shell把top命令按日期追加到文件

    用crontab执行shell把top命令按日期追加到文件 详细图文解说请到本人原创百度经验http://jingyan.baidu.com/article/3052f5a1daf11197f21f8 ...

  4. Android 用java语言执行Shell命令

    最近项目中需要用到java语言来执行shell命令,在网上查了资料, 把自己在项目里用到的命令整理成了工具类开放给大家,希望对大家有用.功能不全,后期我会慢慢添加整合. public class Sh ...

  5. Java 实现 ssh命令 登录主机执行shell命令

    Java 实现 ssh命令 登录主机执行shell命令 1.SSH命令 SSH 为 Secure Shell 的缩写,由 IETF 的网络小组(Network Working Group)所制定:SS ...

  6. Linux远程执行Shell命令或脚本

    ## 远程执行shell命令 ssh [user]@[server] '[command]' # eg. ssh root@192.168.1.1 'uptime' ## 远程执行本地shell脚本 ...

  7. vim中执行shell命令

    1):!command   不退出vim,并执行shell命令command,将命令输出显示在vim的命令区域,不会改变当前编辑的文件的内容   例如   :!ls -l   特别的可以运行:!bas ...

  8. subprocess模块还提供了很多方便的方法来使得执行 shell 命令

    现在你可以看到它正常地处理了转义. 注意 实际上你也可以在shell=False那里直接使用一个单独的字符串作为参数, 但是它必须是命令程序本身,这种做法和在一个列表中定义一个args没什么区别.而如 ...

  9. nodejs 执行shell 命令

    有需要从前端操作服务器执行shell命令的需求 建立一个process.js文件 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 var process =  ...

随机推荐

  1. angular4 form表单验证

    <!-- novalidate 清除浏览器默认的校验行为 --> <form [formGroup]="formModel" (ngSubmit)="o ...

  2. js 操作对象的引用和操作实际对象的区分

    JavaScript高级程序设计-第3版-中 有这么一段话: 在操作对象时,实际上是在操作对象的引用而不是实际的对象.为此,引用类型的值是按引用访问的①. ① 这种说法不严密,当复制保存着对象的某个变 ...

  3. 170324、Spring 处理器和Resource

    1.Spring 框架允许开发者使用两种后处理器扩展 IoC 容器,这两种后处理器扩展 IoC 容器,这两种后处理器可以后处理 IoC 容器本身,或对容器中所有的 Bean 进行后处理.IoC 容器还 ...

  4. Vue.js_础学习之DOM操作

    demo说明: 1.{{message}}                           --“Mustache” 语法(双大括号) 2.v-bind:属性名                   ...

  5. base64图片解析

    大家可能注意到了,网页上有些图片的src或css背景图片的url后面跟了一大串字符,比如:data:image/png;base64, iVBORw0KGgoAAAANSUhEUgAAAAEAAAAk ...

  6. servlet容器与web容器的概念

    一般的说法是这样的,servlet容器的主要任务是管理servlet的生命周期.而web容器更准确的说应该叫web服务器,它是来管理和部署 web应用的.还有一种服务器叫做应用服务器,它的功能比web ...

  7. URI 、URL 和 URN

    URI URI 是 Uniform Resource Identifier 的缩写. Uniform 统一不同类型的资源.比如 txt.mp3.jpeg 等不同的类型的资源都可以使用 URI 来标识 ...

  8. 购物车 cookie session

    0-服务器识别用户的目的:服务器存有不同用户的信息,而对这些信息,服务器自身.网站开发管理者.网站访问者会对其读写: 1-暂且存入服务器数据库,购物车分为2种表:购物车入车表和购物车下单表: 2-单个 ...

  9. zipline风险指标计算 (empyrical模块)

    概述 量化中,我们经常会遇到各种量化指标的计算,对于zipline来说,也会对这部分计算进行处理,由于指标计算的通用性比较强,所以,zipline单独封装了 empyrical 这个模块,可以处理类似 ...

  10. Theme Section---hdu4763(kmp, Next数组的运用)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4763 题意就是求s串中满足EAEBE格式的E的最大长度:我们可以枚举前缀和后缀的所有匹配(k)看是否在 ...