如何查看ANDROID进程信息呢,可以先进入ADB SHELL,然后在PROC文件夹下,有很多对应进程ID号的子文件夹,进入对应的文件夹内,可以看到有以下信息,就可以查询到你的进程信息了。参数如下: /proc//maps 查看进程的虚拟地址空间是如何使用的。 该文件有6列,分别为: 地址:库在进程里地址范围 权限:虚拟内存的权限,r=读,w=写,x=,s=共享,p=私有; 偏移量:库在进程里地址范围 设备:映像文件的主设备号和次设备号; 节点:映像文件的节点号; 路径: 映像文件的路径 每项都与一个vm_area_struct结构成员对应, 范例: 应用程序的正文段(权限为r-xp)从0x08048000到0x08049000,大小为4096;数据段从0x08049000到 0x0804a000,大小为1KB。该应用程序使用了两个库:lib和libc。Libc 的正文段从0x00391000到0x004b4000,大小为1164KB;数据段从0x004b5000到0x004b8000,大小为12KB. Ld 的正文段从00378000到0038d000,大小为84KB;数据段从0x0038e000到0x0038f000,大小为4KB。该应用程序所使用的库所占的虚拟空间的大小从0x4b8000到0x378000,大小为1280KB,其实真正大小为VmLib(1251KB);因为是按页分配,每页大小为4KB。
参数 解释 address: 0085d000-00872000 虚拟内存区域的起始和终止地址文件所占的地址空间 perms:rw-p 权限:r=read, w=write, x=execute, s=shared, p=private(copy on write) offset: 00000000 虚拟内存区域在被映射文件中的偏移量 dev: 03:08 文件的主设备号和次设备号 inode: 设备的节点号,0表示没有节点与内存相对应 name: /lib/ld-2.3.4.so 被映射文件的文件名 各共享库的代码段,存放着二进制可执行的机器指令,是由kernel把该库ELF文件的代码段map到虚存空间; 各共享库的数据段,存放着程序执行所需的全局变量,是由kernel把ELF文件的数据段map到虚存空间; 用户代码段,存放着二进制形式的可执行的机器指令,是由kernel把ELF文件的代码段map到虚存空间; 用户数据段之上是代码段,存放着程序执行所需的全局变量,是由kernel把ELF文件的数据段map到虚存空间; 用户数据段之下是堆(heap),当且仅当malloc调用时存在,是由kernel把匿名内存map到虚存空间,堆则在程序中没有调用malloc的情况下不存在; 用户数据段之下是栈(stack),作为进程的临时数据区,是由kernel把匿名内存map到虚存空间,栈空间的增长方向是从高地址到低地址。
这个所谓的"linux-gate.so.1"的内容就是内核映射的代码,系统中其实并不存在这样一个链接库文件,它的名字是由ldd自己起的,了0xffffe400这里的一段代码,这里就是内核为我们映射的系统调用入口代码。Mapped是该应用程序的虚拟空间的大小,这里的值比用top 或ps都大了4KB,就是最后0xffffe400-0xffffffff的代码;shared 给出共享的虚拟空间部分。
2 /proc//stat 包含了所有CPU活跃的信息,该文件中的所有值都是从系统启动开始累计到当前时刻。
每个参数意思为: 参数 解释 pid=6873 进程(包括轻量级进程,即线程)号 comm=a.out 应用程序或命令的名字 task_state=R 任务的状态,R:runnign, S:sleeping (TASK_INTERRUPTIBLE), D:disk sleep (TASK_UNINTERRUPTIBLE), T: stopped, T:tracing stop,Z:zombie, X:dead ppid=6723 父进程ID pgid=6873 线程组号 sid=6723 c该任务所在的会话组ID tty_nr=34819(pts/3) 该任务的tty终端的设备号,INT(34817/256)=主设备号,(34817-主设备号)=次设备号 tty_pgrp=6873 终端的进程组号,当前运行在该任务所在终端的前台任务(包括shell 应用程序)的PID。 task->flags=8388608 进程标志位,查看该任务的特性 min_flt=77 该任务不需要从硬盘拷数据而发生的缺页(次缺页)的次数 cmin_flt=0 累计的该任务的所有的waited-for进程曾经发生的次缺页的次数目 maj_flt=0 该任务需要从硬盘拷数据而发生的缺页(主缺页)的次数 cmaj_flt=0 累计的该任务的所有的waited-for进程曾经发生的主缺页的次数目 utime=1587 该任务在用户态运行的时间,单位为jiffies stime=1 该任务在核心态运行的时间,单位为jiffies cutime=0 累计的该任务的所有的waited-for进程曾经在用户态运行的时间,单位为jiffies cstime=0 累计的该任务的所有的waited-for进程曾经在核心态运行的时间,单位为jiffies priority=25 任务的动态优先级 nice=0 任务的静态优先级 num_threads=3 该任务所在的线程组里线程的个数 it_realvalue=0 由于计时间隔导致的下一个 SIGALRM 发送进程的时延,以 jiffy 为单位. start_time=5882654 该任务启动的时间,单位为jiffies vsize=1409024(page) 该任务的虚拟地址空间大小 rss=56(page) 该任务当前驻留物理地址空间的大小 Number of pages the process has in real memory,minu 3 for administrative purpose. 这些页可能用于代码,数据和栈。 rlim=4294967295(bytes) 该任务能驻留物理地址空间的最大值 start_code=134512640 该任务在虚拟地址空间的代码段的起始地址 end_code=134513720 该任务在虚拟地址空间的代码段的结束地址 start_stack=3215579040 该任务在虚拟地址空间的栈的结束地址 kstkesp=0 esp(32 位堆栈指针) 的当前值, 与在进程的内核堆栈页得到的一致. kstkeip=2097798 指向将要执行的指令的指针, EIP(32 位指令指针)的当前值. pendingsig=0 待处理信号的位图,记录发送给进程的普通信号 block_sig=0 阻塞信号的位图 sigign=0 忽略的信号的位图 sigcatch=082985 被俘获的信号的位图 wchan=0 如果该进程是睡眠状态,该值给出调度的调用点 nswap 被swapped的页数,当前没用 cnswap 所有子进程被swapped的页数的和,当前没用 exit_signal=17 该进程结束时,向父进程所发送的信号 task_cpu(task)=0 运行在哪个CPU上 task_rt_priority=0 实时进程的相对优先级别 task_policy=0 进程的调度策略,0=非实时进程,1=FIFO实时进程;2=RR实时进程 |
3 /proc//status
包含了所有CPU活跃的信息,该文件中的所有值都是从系统启动开始累计到当前时刻。
[root@localhost ~]# cat /proc/self/status
Name: cat
State: R (running)
SleepAVG: 88%
Tgid: 5783
Pid: 5783
PPid: 5742
TracerPid: 0
Uid: 0 0 0 0
Gid: 0 0 0 0
FDSize: 256
Groups: 0 1 2 3 4 6 10
VmSize: 6588 kB
VmLck: 0 kB
VmRSS: 400 kB
VmData: 144 kB
VmStk: 2040 kB
VmExe: 14 kB
VmLib: 1250 kB
StaBrk: 0804e000 kB
Brk: 088df000 kB
StaStk: bfe03270 kB
ExecLim: 0804c000
Threads: 1
SigPnd: 0000000000000000
ShdPnd: 0000000000000000
SigBlk: 0000000000000000
SigIgn: 0000000000000000
SigCgt: 0000000000000000
CapInh: 0000000000000000
CapPrm: 00000000fffffeff
CapEff: 00000000fffffeff
输出解释
参数 解释
Name 应用程序或命令的名字
State 任务的状态,运行/睡眠/僵死/
SleepAVG 任务的平均等待时间(以nanosecond为单位),交互式任务因为休眠次数多、时间长,它们的 sleep_avg 也会相应地更大一些,所以计算出来的优先级也会相应高一些。
Tgid 线程组号
Pid 任务ID
Ppid 父进程ID
TracerPid 接收跟踪该进程信息的进程的ID号
Uid Uid euid suid fsuid
Gid Gid egid sgid fsgid
FDSize 文件描述符的最大个数,file->fds
Groups
VmSize(KB) 任务虚拟地址空间的大小 (total_vm-reserved_vm),其中total_vm为进程的地址空间的大小,reserved_vm:进程在预留或特殊的内存间的物理页
VmLck(KB) 任务已经锁住的物理内存的大小。锁住的物理内存不能交换到硬盘 (locked_vm)
VmRSS(KB) 应用程序正在使用的物理内存的大小,就是用ps命令的参数rss的值 (rss)
VmData(KB) 程序数据段的大小(所占虚拟内存的大小),存放初始化了的数据; (total_vm-shared_vm-stack_vm)
VmStk(KB) 任务在用户态的栈的大小 (stack_vm)
VmExe(KB) 程序所拥有的可执行虚拟内存的大小,代码段,不包括任务使用的库 (end_code-start_code)
VmLib(KB) 被映像到任务的虚拟内存空间的库的大小 (exec_lib)
VmPTE 该进程的所有页表的大小,单位:kb
Threads 共享使用该信号描述符的任务的个数,在POSIX多线程序应用程序中,线程组中的所有线程使用同一个信号描述符。
SigQ 待处理信号的个数
SigPnd 屏蔽位,存储了该线程的待处理信号
ShdPnd 屏蔽位,存储了该线程组的待处理信号
SigBlk 存放被阻塞的信号
SigIgn 存放被忽略的信号
SigCgt 存放被俘获到的信号
CapInh Inheritable,能被当前进程执行的程序的继承的能力
CapPrm Permitted,进程能够使用的能力,可以包含CapEff中没有的能力,这些能力是被进程自己临时放弃的,CapEff是CapPrm的一个子集,进程放弃没有必要的能力有利于提高安全性
CapEff Effective,进程的有效能力
范例 1
可以看出该应用程序的正文段(1KB)很小,说明代码很少,是依靠库(1251KB)来执行。栈(138KB)适中,说明没有太多许多嵌套函数或特别多的临时变量。VmLck为0说明进程没有锁住任何页。VmRSS表示当前进程使用的物理内存为2956KB。当进程开始使用已经申请的但还没有用的内存时,VmRSS的值开始增大,但是VmSize保持不变。
[root@localhost 1]# cat /proc/4668/status
Name: gam_server
State: S (sleeping)
SleepAVG: 88%
Tgid: 31999
Pid: 31999
PPid: 1
TracerPid: 0
Uid: 0 0 0 0
Gid: 0 0 0 0
FDSize: 256
Groups: 0 1 2 3 4 6 10
VmSize: 2136 kB
VmLck: 0 kB
VmRSS: 920 kB
VmData: 148 kB
VmStk: 88 kB
VmExe: 44 kB
VmLib: 1820 kB
VmPTE: 20 kB
Threads: 1
SigQ: 1/2047
SigPnd: 0000000000000000
ShdPnd: 0000000000000000
SigBlk: 0000000000000000
SigIgn: 0000000000001006
SigCgt: 0000000210000800
CapInh: 0000000000000000
CapPrm: 00000000fffffeff
CapEff: 00000000fffffeff
[root@localhost 31999]#
4 /proc//statm
包含了所有CPU活跃的信息,该文件中的所有值都是从系统启动开始累计到当前时刻。
[root@localhost ~]# cat /proc/self/statm
654 57 44 0 0 334 0
输出解释
CPU 以及CPU0。。。的每行的每个参数意思(以第一行为例)为:
参数 解释 /proc//status
Size (pages) 任务虚拟地址空间的大小 VmSize/4
Resident(pages) 应用程序正在使用的物理内存的大小 VmRSS/4
Shared(pages) 共享页数 0
Trs(pages) 程序所拥有的可执行虚拟内存的大小 VmExe/4
Lrs(pages) 被映像到任务的虚拟内存空间的库的大小 VmLib/4
Drs(pages) 程序数据段和用户态的栈的大小 (VmData+ VmStk )4
dt(pages) 0