Android中ps命令各字段的含义

时间:2024-03-19 16:29:59

Android中ps命令各字段的含义

通过ps命令查看进程的状态,看到如下输出:

USER      PID   PPID  VSIZE  RSS   WCHAN              PC       S  NAME
u0_a91    3140  356   2220664 85240 SyS_epoll_ 7f97b29798 S com.qiku.cardmanager

各字段的意义:

1 . USER:进程uid
2 . PID:进程pid
3 . PPID:父进程pid。所有app进程的父进程都是zygote, 所以zygote进程pid肯定是356:

root      356   1     2144280 65116 poll_sched 7f97b296d8 S zygote64

zygote的ppid为1,说明zygote父进程是init进程:

root      1     0     12852  1768  SyS_epoll_ 00004ae004 S /init

4 . VSIZE : 进程虚拟地址空间的大小。man ps中对VSIZE的解释:

virtual memory size of the process in KiB (1024-byte units). Device mappings are currently excluded; this is subject to change.

5.RSS:进程所占的物理内存大小。man ps中对RSS的解释:

resident set size, the non-swapped physical memory that a task has used (in kiloBytes).

6.PC:program counter,程序计数器。

7.Name:进程名

8.S 进程状态,常见的状态如下:

R 正在运行或在运行队列上等待调度
S 正在睡眠,该睡眠可被中断,如可以被信号唤醒
D 正在睡眠,该睡眠不可被中断,不接收信号
Z zombie僵尸进程。进程死后没有被其父进程回收

9 . WCHAN :当前线程在哪个内核函数上睡眠。man ps 对该字段的解释如下:

name of the kernel function in which the process is sleeping, a “-” if the process is running, or a “*” if the process is multi-threaded and ps is not displaying threads.

SyS_epoll_ 说明进程的主线程正在消息队列上等待,比如我们分析Android ANR问题时,经常遇到如下日志,说明主线程正在内核的epoll上睡眠,也就是说主线程正在消息循环上等待,因为消息循环就是通过epoll实现的。

Android中ps命令各字段的含义

在另一篇文章中消息介绍Android消息循环的实现。