最近需要查看应用进程的 cpu 信息,使用到了 top 工具,遇到了一个坑,在华为的几款手机上这个工具用法跟在三星,小米上不太一样。top 工具提供了很多选项设置输出内容,对于 top 的认识还不是很深入,推荐参考站外博客:
http://www.cnblogs.com/zhoug2020/p/6336453.html;
https://www.cnblogs.com/DawaTech/p/5388570.html
一直取用的是 CPU 占用的百分比列。
adb -s deviceid shell top -n 1 -s cpu -d 0 |findstr pkgname
windows 使用 findstr,linux 替换为 grep,命令意义是采集一次设备上的 cpu 信息。-n:采集次数,-s:按照%cpu 列进行排序,-d:间隔多久采集 1 次
2399 u0_a231 16 -4 23% R 78 1919696K 126832K ta pkgname
命令中不指定-p 选项也可以获取,并且在输出中 cpu 占用值带了百分号。
命令 1 在华为 p 系列上并不适用,后来发现华为手机使用的是进程 id,而不是包名,这样就需要首先根据 app 包名获取进程 id 了,这里需要注意的是有的 APP 进程在实际执行的时候可能会开其他的进程,根据实际使用情况获取关系进程的 pid 吧,也可以使用正则表达式匹配处理,获取进程可参照:http://www.cnblogs.com/peida/archive/2012/12/19/2824418.html。
adb -s deviceid shell top -b -n 1 -p pid | findstr pkgname
windows 使用 findstr,linux 替换为 grep,命令意义是采集一次设备上的 cpu 信息。-n:采集次数,-p:采集的进程 id,-b 批处理模式输出。
14949 u0_a125 10 -10 2.2G 453M 214M S 85.1 12.1 12:32.88 pkgname
常用的还有-m 选项,设置最多打印的行数。
top 是一个交互式的命令,使用 linux 可以更方便的理解 top 输出的内容。
top 默认输出的指标有 pid,user,pr,ni,virt,res,shr,s,%cpu,%mem,time+,command:
手机上的 top 和 linux 上的 top,可以比较着来看。
top 输出指标的含义: