android adb shell 查询进程流量情况

        本文仅仅是通过adb查询应用的流量使用情况。当然在Android应用程序的Java代码中同样可以获得应用的流量使用情况。


1、获得应用的Pid。

      可以通过adb shell ps获得所有进程信息,里面当然包含应用的pid和包名。然后对返回信息进行查找(按包名查找)。

2、获得应用的Uid.

      Android系统的目录文件/proc/pid/status(注意:标红的pid是第1步中获得的pid,是一个大于0的数字)中包含关于uid的信息。以pid=7328为例,通过adb shell cat /proc/7328/status可以得到以下信息:


1|shell@p1:/ $ cat /proc/7328/status
cat /proc/7328/status
Name:   .qihoo.secstore
State:  S (sleeping)
Tgid:   7328
Pid:    7328
PPid:   479
TracerPid:      0
Uid:    10194   10194   10194   10194
Gid:    10194   10194   10194   10194
FDSize: 128
Groups: 1015 1028 3001 3002 3003 9997 50194
VmPeak:  1828500 kB
VmSize:  1709912 kB
VmLck:         0 kB
VmPin:         0 kB
VmHWM:    123552 kB
VmRSS:     62932 kB
VmData:   186776 kB
VmStk:      8192 kB
VmExe:        12 kB
VmLib:     87568 kB
VmPTE:       716 kB
VmSwap:    21692 kB
Threads:        44
SigQ:   0/9853
SigPnd: 0000000000000000
ShdPnd: 0000000000000000
SigBlk: 0000000000001a04
SigIgn: 0000000000000000
SigCgt: 00000002000094f8
CapInh: 0000000000000000
CapPrm: 0000000000000000
CapEff: 0000000000000000
CapBnd: 0000000000000000
Cpus_allowed:   3f
Cpus_allowed_list:      0-5
voluntary_ctxt_switches:        5671
nonvoluntary_ctxt_switches:     4188

     

     解析以上信息即可得到Uid.

3、读取流量值。

      Android系统的目录文件/proc/uid_stat/uid/下一般会有两个文件tcp_snd和tcp_rcv。(注意:标红的uid是第二步中获得的Uid数值)。通过adb shell cat /proc/uid_stat/10194/tcp_snd和adb shell cat /proc/uid_stat/10194/tcp_rcv即可分别获得上行流量和下行流量。


shell@p1:/ $ ls /proc/uid_stat/10194
ls /proc/uid_stat/10194
tcp_rcv
tcp_snd
shell@p1:/ $

shell@p1:/ $ cat /proc/uid_stat/10194/tcp_snd
cat /proc/uid_stat/10194/tcp_snd
36006

shell@p1:/ $ cat /proc/uid_stat/10194/tcp_rcv
cat /proc/uid_stat/10194/tcp_rcv
41460

注意:

1、这里的值的单位是Byte字节,并且是累积量

2、有的应用是没有tcp_snd和tcp_rcv这两个文件的,比如某些系统应用。

3、某些没有流量交换的应用的可能也没有这两个文件,或者这两个文件里没有数据。



你可能感兴趣的:(Android,android,shell命令,adb,uid,流量)