1. 概述
在adb shell终端,输入 ps,可查看Android当前所有的进程状态。ps命令是Process Status的缩写。ps命令用来列出系统中当前运行的那些进程及状态。ps命令列出的是当前那些进程的快照,就是执行ps命令的那个时刻的那些进程,如果想要动态的显示进程信息,就可以使用top命令。
ps命令对于分析系统异常情况时都是必备的技能,需要通过这个简单命令来查看系统真实的状态。
Linux上进程的5种状态
- 运行(正在运行或在运行队列中等待)
- 中断(休眠中,受阻,在等待某个条件的形成或接受到信号)
- 不可中断(收到信号不唤醒和不可运行,进程必须等待直到有中断发生)
- 僵死(进程已终止,但进程描述符存在,直到父进程调用wait4()系统调用后释放)
- 停止(进程收到SIGSTOP, SIGSTP, SIGTIN, SIGTOU信号后停止运行运行)
ps标识对应的5种状态码
- R 运行 runnable (on run queue)
- S 中断 sleeping
- D 不可中断 uninterruptible sleep (usually IO)
- Z 僵死 a defunct (”zombie”) process
- T 停止 traced or stopped
2. ps的使用及示例说明
用法:ps [ 参数 ]
命令参数
ps命令的参数非常多,这里我们简单介绍几个常用的参数,具体的大家可以自行深入了解
- -t 显示进程里的所有子线程
- -c 显示进程耗费的CPU时间
- -p 显示进程优先级、nice值、调度策略
- -P 显示进程,通常是bg(后台进程)或fg(前台进程)
- -x 显示进程耗费的用户时间和系统时间,格式:(u:0, s:0),单位:秒(s)。
上面的参数可根据需要自由组合
查看所有普通应用程序,由于目前android是单用户的,所以用户普通进程的user都是以u0开头的,google有意把android发展成支持多用户的,以后应该会有u1, u2_等等的用户名,另外普通app的uid是从10000开始:
ps | grep u0
;
输出结果含义
简单举个例子,再命令窗口输入如下命令(3835是某个进程的PID):
ps -P -p -x -c | grep -E "NAME|3835 "
输出结果:
结果分析:
字段 | 含义 | 值 |
---|---|---|
USER | 进程的当前用户 | system |
PID | 进程ID | 3835 |
PPID | 父进程ID | 1 |
VSIZE | 进程虚拟地址空间大小 | 1016 |
RSS | 进程正在使用物理内存大小 | 184 |
CPU | CPU消耗 | 0 |
PRIO | 进程优化级 | 20 |
NICE | Nice值 | 0 |
RTPRI | 实时进程优先级 | 0 |
SCHED | 调度策略 | SCHED_OTHER(默认策略) |
PCY | 进程状态 | - |
WCHAN | 内核地址 | ffffffff |
PC | 当前程序指针 | f72e1774 |
- | 休眠状态 | S |
NAME | 进程名 | /system/bin/servicemanager |
- | 用户态和内核态时间(单位s) | u:0, s:2 |
注: WCHAN值为0代表进程处于运行态;否则代表内核地址(休眠态)。