- 浏览: 356874 次
- 性别:
- 来自: 南京
文章分类
最新评论
-
nglxl:
点赞啊,必须点赞!!深度好文,解决了困扰我多年的疑惑。
tcp 长连接与短连接 -
cofftech:
opengl源码http://www.eyesourcecod ...
OPenGL ES 关键API小结 -
mail_j:
不是很好用,很多情况都不能处理 1、没有区分关键字的大小写2、 ...
Java解析sql语句,分析出调用到的所有表 -
a455642158:
就算监听到变成了cmwap还不行,还得监听网络连接状态Stat ...
android APN切换cmwap实现 -
xuhl1022:
看了您的android 4篇 浏览器二次开发,感触颇深,写的很 ...
Android浏览器Browser二次开发(四)浏览器中的APN切换
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.
21. InputStream in = null;
22. // 设置一个路径(绝对路径了就不一定需要)
23. if (workdirectory != null) {
24. // 设置工作目录(同上)
25. builder.directory(new File(workdirectory));
26. // 合并标准错误和标准输出
27. builder.redirectErrorStream(true);
28. // 启动一个新进程
29. Process process = builder.start();
30.
31. // 读取进程标准输出流
32. in = process.getInputStream();
33. byte[] re = new byte[1024];
34. while (in.read(re) != -1) {
35. result = result.append(new String(re));
36. }
37. }
38. // 关闭输入流
39. if (in != null) {
40. in.close();
41. }
42. } catch (Exception ex) {
43. ex.printStackTrace();
44. }
45. return result.toString();
46. }
二、用途
执行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.
4. PID CPU% S #THR VSS RSS PCY UID Name // 进程属性
5. xx xx% x xx xx xx xx xx xx
6.
7. CPU占用率:
8. User 用户进程
9. System 系统进程
10. IOW IO等待时间
11. IRQ 硬中断时间
12.
13. CPU使用情况(指一个最小时间片内所占时间,单位jiffies。或者指所占进程数):
14. User 处于用户态的运行时间,不包含优先值为负进程
15. Nice 优先值为负的进程所占用的CPU时间
16. Sys 处于核心态的运行时间
17. Idle 除IO等待时间以外的其它等待时间
18. IOW IO等待时间
19. IRQ 硬中断时间
20. SIRQ 软中断时间
21.
22. 进程属性:
23. PID 进程在系统中的ID
24. CPU% 当前瞬时所以使用CPU占用率
25. S 进程的状态,其中S表示休眠,R表示正在运行,Z表示僵死状态,N表示该进程优先值是负数。
26. #THR 程序当前所用的线程数
27. VSS Virtual Set Size 虚拟耗用内存(包含共享库占用的内存)
28. RSS Resident Set Size 实际使用物理内存(包含共享库占用的内存)
29. PCY OOXX,不知道什么东东
30. UID 运行当前进程的用户id
31. Name 程序名称android.process.media
32.
33. // ps:内存占用大小有如下规律:VSS >= RSS >= PSS >= USS
34. // PSS Proportional Set Size 实际使用的物理内存(比例分配共享库占用的内存)
35. // USS Unique Set Size 进程独自占用的物理内存(不包含共享库占用的内存)
在附件Android系统->android top.txt文件内,自个总结的。
2)执行代码
1. // top命令
2. public static final String[] TOP = { "/system/bin/top", "-n", "1" };
3.
4. // 现在执行top -n 1,我们只需要第二行(用第二行求得CPU占用率,精确数据)
5. // 第一行:User 35%, System 13%, IOW 0%, IRQ 0% // CPU占用率
6. // 第二行:User 109 + Nice 0 + Sys 40 + Idle 156 + IOW 0 + IRQ 0 + SIRQ 1 = 306
7. // // CPU使用情况
8. public static synchronized String run(String[] cmd) {
9. String line = "";
10. InputStream is = null;
11. try {
12. Runtime runtime = Runtime.getRuntime();
13. Process proc = runtime.exec(cmd);
14. is = proc.getInputStream();
15.
16. // 换成BufferedReader
17. BufferedReader buf = new BufferedReader(new InputStreamReader(is));
18. do {
19. line = buf.readLine();
20. // 前面有几个空行
21. if (line.startsWith("User")) {
22. // 读到第一行时,我们再读取下一行
23. line = buf.readLine();
24. break;
25. }
26. } while (true);
27.
28. if (is != null) {
29. buf.close();
30. is.close();
31. }
32. } catch (IOException e) {
33. e.printStackTrace();
34. }
35. return line;
36. }
37.
38. // 获取指定应用的top命令获取的信息
39. // PID CPU% S #THR VSS RSS PCY UID Name // 进程属性
40. // 如果当前应用不在运行则返回null
41. public static synchronized String run(String[] cmd, String pkgName) {
42. String line = null;
43. InputStream is = null;
44. try {
45. Runtime runtime = Runtime.getRuntime();
46. Process proc = runtime.exec(cmd);
47. is = proc.getInputStream();
48.
49. // 换成BufferedReader
50. BufferedReader buf = new BufferedReader(new InputStreamReader(is));
51. do {
52. line = buf.readLine();
53. // 读取到相应pkgName跳出循环(或者未找到)
54. if (null == line || line.endsWith(pkgName)) {
55. break;
56. }
57. } while (true);
58.
59. if (is != null) {
60. buf.close();
61. is.close();
62. }
63. } catch (IOException e) {
64. e.printStackTrace();
65. }
66. return line;
67. }
--------------------------------------------
PID:进程在系统中的ID
CPU% - 当前瞬时所以使用CPU占用率
#THR - 程序当前所用的线程数
UID - 运行当前进程的用户id
Name - 程序名称org.xmpp.app
VSS - Virtual Set Size 虚拟耗用内存(包含共享库占用的内存)
RSS - Resident Set Size 实际使用物理内存(包含共享库占用的内存)
PSS - Proportional Set Size 实际使用的物理内存(比例分配共享库占用的内存)
USS - Unique Set Size 进程独自占用的物理内存(不包含共享库占用的内存)
一般来说内存占用大小有如下规律:VSS >= RSS >= PSS >= USS
一、方法
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.
21. InputStream in = null;
22. // 设置一个路径(绝对路径了就不一定需要)
23. if (workdirectory != null) {
24. // 设置工作目录(同上)
25. builder.directory(new File(workdirectory));
26. // 合并标准错误和标准输出
27. builder.redirectErrorStream(true);
28. // 启动一个新进程
29. Process process = builder.start();
30.
31. // 读取进程标准输出流
32. in = process.getInputStream();
33. byte[] re = new byte[1024];
34. while (in.read(re) != -1) {
35. result = result.append(new String(re));
36. }
37. }
38. // 关闭输入流
39. if (in != null) {
40. in.close();
41. }
42. } catch (Exception ex) {
43. ex.printStackTrace();
44. }
45. return result.toString();
46. }
二、用途
执行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.
4. PID CPU% S #THR VSS RSS PCY UID Name // 进程属性
5. xx xx% x xx xx xx xx xx xx
6.
7. CPU占用率:
8. User 用户进程
9. System 系统进程
10. IOW IO等待时间
11. IRQ 硬中断时间
12.
13. CPU使用情况(指一个最小时间片内所占时间,单位jiffies。或者指所占进程数):
14. User 处于用户态的运行时间,不包含优先值为负进程
15. Nice 优先值为负的进程所占用的CPU时间
16. Sys 处于核心态的运行时间
17. Idle 除IO等待时间以外的其它等待时间
18. IOW IO等待时间
19. IRQ 硬中断时间
20. SIRQ 软中断时间
21.
22. 进程属性:
23. PID 进程在系统中的ID
24. CPU% 当前瞬时所以使用CPU占用率
25. S 进程的状态,其中S表示休眠,R表示正在运行,Z表示僵死状态,N表示该进程优先值是负数。
26. #THR 程序当前所用的线程数
27. VSS Virtual Set Size 虚拟耗用内存(包含共享库占用的内存)
28. RSS Resident Set Size 实际使用物理内存(包含共享库占用的内存)
29. PCY OOXX,不知道什么东东
30. UID 运行当前进程的用户id
31. Name 程序名称android.process.media
32.
33. // ps:内存占用大小有如下规律:VSS >= RSS >= PSS >= USS
34. // PSS Proportional Set Size 实际使用的物理内存(比例分配共享库占用的内存)
35. // USS Unique Set Size 进程独自占用的物理内存(不包含共享库占用的内存)
在附件Android系统->android top.txt文件内,自个总结的。
2)执行代码
1. // top命令
2. public static final String[] TOP = { "/system/bin/top", "-n", "1" };
3.
4. // 现在执行top -n 1,我们只需要第二行(用第二行求得CPU占用率,精确数据)
5. // 第一行:User 35%, System 13%, IOW 0%, IRQ 0% // CPU占用率
6. // 第二行:User 109 + Nice 0 + Sys 40 + Idle 156 + IOW 0 + IRQ 0 + SIRQ 1 = 306
7. // // CPU使用情况
8. public static synchronized String run(String[] cmd) {
9. String line = "";
10. InputStream is = null;
11. try {
12. Runtime runtime = Runtime.getRuntime();
13. Process proc = runtime.exec(cmd);
14. is = proc.getInputStream();
15.
16. // 换成BufferedReader
17. BufferedReader buf = new BufferedReader(new InputStreamReader(is));
18. do {
19. line = buf.readLine();
20. // 前面有几个空行
21. if (line.startsWith("User")) {
22. // 读到第一行时,我们再读取下一行
23. line = buf.readLine();
24. break;
25. }
26. } while (true);
27.
28. if (is != null) {
29. buf.close();
30. is.close();
31. }
32. } catch (IOException e) {
33. e.printStackTrace();
34. }
35. return line;
36. }
37.
38. // 获取指定应用的top命令获取的信息
39. // PID CPU% S #THR VSS RSS PCY UID Name // 进程属性
40. // 如果当前应用不在运行则返回null
41. public static synchronized String run(String[] cmd, String pkgName) {
42. String line = null;
43. InputStream is = null;
44. try {
45. Runtime runtime = Runtime.getRuntime();
46. Process proc = runtime.exec(cmd);
47. is = proc.getInputStream();
48.
49. // 换成BufferedReader
50. BufferedReader buf = new BufferedReader(new InputStreamReader(is));
51. do {
52. line = buf.readLine();
53. // 读取到相应pkgName跳出循环(或者未找到)
54. if (null == line || line.endsWith(pkgName)) {
55. break;
56. }
57. } while (true);
58.
59. if (is != null) {
60. buf.close();
61. is.close();
62. }
63. } catch (IOException e) {
64. e.printStackTrace();
65. }
66. return line;
67. }
--------------------------------------------
PID:进程在系统中的ID
CPU% - 当前瞬时所以使用CPU占用率
#THR - 程序当前所用的线程数
UID - 运行当前进程的用户id
Name - 程序名称org.xmpp.app
VSS - Virtual Set Size 虚拟耗用内存(包含共享库占用的内存)
RSS - Resident Set Size 实际使用物理内存(包含共享库占用的内存)
PSS - Proportional Set Size 实际使用的物理内存(比例分配共享库占用的内存)
USS - Unique Set Size 进程独自占用的物理内存(不包含共享库占用的内存)
一般来说内存占用大小有如下规律:VSS >= RSS >= PSS >= USS
发表评论
-
基于Java NIO的手机答题游戏开发
2014-03-31 17:59 1715先上个游戏截图: 豌豆荚地址: http://apps.w ... -
enable android deviceconnection under linux
2013-04-24 15:45 976开发环境搭建完毕,Eclipse,Java,ADT都已经折腾 ... -
set CCache for building android source code
2013-04-24 15:14 1163Setting up ccache You can opti ... -
android 源码下载403 forbidden, 406 not acceptable 错误
2013-04-24 08:46 2422解决方法 1. 浏览器登录https://android.g ... -
ubuntu11.10 编译android4.0 错处
2013-04-08 21:45 1199今天使用ubuntu11.10编译android4.0出现以下 ... -
常用WebService列表
2013-01-31 23:22 2611快递查询接口 http://webservice.36wu.c ... -
startActivityForResult 无响应问题
2013-01-24 13:57 3728今天开发遇到了个问题, 就是从一个Activity中使用sta ... -
Android中仿新浪微博刷新列表
2012-11-22 17:35 7322大家看到新浪微博中的列表往下拉的时候, 头部出现正在刷新,然后 ... -
Grid调整间距
2012-09-29 08:52 1699今天使用GridView, 发现点中某一Item时选中部分的背 ... -
android gallery和Animation组合使用, 看美女美图
2012-09-11 21:01 4353今天主要探究Gallery和Animation的使用。 制作一 ... -
BBBBBB111
2012-03-23 11:42 10陈波: 本周:代码review,解决findbugs中bug以 ... -
MonkeyTestError
2012-03-21 10:15 903-20 21:36:42.439 W/dalvikvm( ... -
INSTALL_FAILED_OLDER_SDK ERROR
2012-03-12 15:52 4397Install APK with adb: $ platfo ... -
4.0源码编译问题
2012-03-07 17:12 31241、fatal error: GL/glx.h: No suc ... -
4.0 编译apk中无classes.dex
2012-03-07 17:11 3903下载完android 4.0代码,模拟器里面的gallery不 ... -
Android 4.0源码编译错误
2012-03-05 10:19 2546UNEXPECTED TOP-LEVEL EXCEPTION: ... -
AndroidLockScreenDemo
2012-02-18 15:54 933锁屏解锁的成功案例。 -
G14 root权限获取
2012-02-13 23:36 2830HTC G14 ROOT权限获取后就能删除系统自带的程序,相信 ... -
锁屏d ds
2011-12-15 00:49 844private final IDevicePolicyMana ... -
HuHug
2011-11-14 00:30 908gfjijgsdklgkg
相关推荐
ExecuteShell 是一个可以让你在你的 Android 项目上方便快速使用 shell 指令的开源库
一个用于在Android开发中 执行adb shell命令的类,可以以最高权限(su)执行。例如mount命令等
##AdbShellCommand在Android项目中执行adb Shell命令,通过java代码调用执行,本程序采用MVP架构。###Java中执行adb shell命令本项目中,adb shell命令执行的实现方法主要参考网文()。文章中,把执行代码集成在...
在android上执行Linux命令是一种高级方法,可用于访问手机中受限制的功能,例如,您无法直接从编程中获得这些功能; 录制屏幕,删除损坏的文件,获取系统信息,进程,硬件信息。 除非您拥有根设备,否则有些命令将不...
通过上面的命令,就可以进入设备或模拟器的shell环境中,在这个Linux Shell中,你可以执行各种Linux 的命令,另外如果只想执行一条shell命令,可以采用以下的方式: adb shell [command] 如:adb shell ...
----------------------------------- Android 编程基础 1 封面----------------------------------- Android 编程基础 2 开放手机联盟 --Open --Open --Open --Open Handset Handset Handset Handset Alliance ...
这个命令是查看当前连接的设备, 连接到计算机的android设备或者模拟器将会列出显示 2. 安装软件 adb install <apk文件路径> 这个命令将指定的apk文件安装到设备上+ a& w/ K7 l7 g& W# h& P 3. 卸载软件 adb...
Android Shell工具类,可用于检查系统root权限,并在shell或root用户下执行shell命令。如: checkRootPermission() 检查root权限 execCommand(String[] commands, boolean isRoot, boolean isNeedResultMsg) shell...
使用ADB Shell命令,可以进入设备或模拟器的Shell环境中,在这个Linux Shell中,可以执行各种Linux命令。例如:adb shell 3. 发布端口 使用ADB forward命令,可以设置任意的端口号,作为主机向模拟器或设备的请求...
这时可以 adb shell 然后 su 后执行命令,也可以让 adbd 以 root 权限执行,这个就能随意执行高权限命令了。 命令: adb root 正常输出: restarting adbd as root 现在再运行 adb shell,看看命令行提示符是不是...
历史作为拥有偶尔越狱的旧iPhone 4S(及其他)的Android开发人员,我一直不停地输入ssh / scp命令来使我的设备执行操作,这使我很烦,所以我决定为此编写一个脚本。用法: idb [-u ] command [options] -u <UDID> ...
✗ Android SDK is missing command line tools; download from https://goo.gl/XxQghQ • Try re-installing or updating your Android SDK, visit ...
通过无线连接ADB:插上手机输入命令:adb tcpip 5555输入连接命令:adb connect 172.16.7.204:5555以root方式执行shell命令:先执行adb rootRead-only file system时以可读写方式执行:adb remount如果结果太长可以...
Appium 提供了一个直接执行 adb shell 方法,通过在 Appium 启动时增加 --relaxed-security 参数,可以实现 adb shell 方法的执行。 ``` appium -p 4723 --relaxed-security ``` 然后,使用 Python 编写一个方法,...
要开始使用Posix操作系统,请执行以下操作: 1. Download cmake and sfml 2. Open a shell in the project directory 3. Create a dir named build 4. Change into build directory 5. Run the command "cmake .....
确保droidducky.sh具有执行权限。 bash droidducky.sh payload.dd 例子 您可以尝试以下有效负载代码。 REM Loading payload code. GUI r STRING cmd REM Opening command prompt. ENTER DELAY 100 REM Sending ...
Webpack编译器插件 轻松监听webpack编译器的钩子并在事件上执行命令。API 该插件在webpack构建过程的关键阶段运行您指定的命令。buildStart 第一次启动webpack构建时,仅在插件加载后才运行一次。 请参阅 。...
(这里是看ov5640的驱动的probe执行是否正确?设备ID是否读取成功!) W:\ov5640_spi20_r40t\lichee\linux-3.10\drivers\media\platform\sunxi-vfe\device\ov5640.c static int sensor_detect(struct v4l2_subdev *...