在Android开发调试过程中,常需要使用ps
指令用于获取当前系统进程的快照信息(如果想要获取进程动态信息,则需要使用top
命令)。通过ADB SHELL连接上手机后,输入adb shell
命令进入shell控制台, 输入ps
即可查看当前系统所有进程信息:
Android的PS指令在Linux的基础上做了很大的简化,使用ps
查看一个进程的信息,大概有两种方式,一个是根据进程全名,一个是根据进程ID。比如,这里要获取Phone进程的信息:
- 进程名
- 进程ID
有关PS指令的具体代码可参考:
/android/system/core/toolbox/ps.c
另外,通过ps
指令,指定参数-T
还可以查看进程内所有线程的状态:
上述ps
指令输出各个参数有何含义?
FIELD | Description |
---|---|
USER | 进程持有者名称 |
PID | 进程ID |
PPID | 父进程ID |
VSIZE | 进程在虚拟内存所占的空间大小(KB) |
RSS | 进程实际所使用的物理内存大小(KB) |
WCHAN | Waiting Channel, 进程等待正在等待的某个事件,如果为空,则表示进程处于运行状态 |
PC | Program Counter, 程序计数器所保存的地址 |
NAME | 进程名 |
除了列表中的参数之外,输出的参数中还有一列用于表示进程状态,这里看到进程状态是S
(sleeping)。通常进程可能有以下几个状态:
缩写代号 | 进程状态 | 含义 |
---|---|---|
D | TASK_UNINTERRUPTABLE | uninterruptible sleeping, cannot be woken up |
S | TASK_INTERRUPTABLE | sleeping, can be woken up |
R | TASK_RUNNING | task currently running |
T | TASK_STOPPED | traced or stopped |
Z | TASK_ZOMBIE | zombie process, terminated and parent not waiting |
参考文献
- https://www.cyberciti.biz/faq/show-all-running-processes-in-linux/
- https://ss64.com/bash/ps.html
- http://www.unix.com/man-page/All/1b/ps/
- http://www.petefreitag.com/tools/man-pages/ps.html
- https://events.linuxfoundation.org/images/stories/pdf/lf_abs12_kobayashi.pdf
- https://access.redhat.com/sites/default/files/attachments/processstates_20120831.pdf