命令
adb shell ps
- -t 查看进程中线程的信息
- -x 查看utime和stime
- -P 查看属性
- -p 查看调度策略,通常是查看一个app处于前台还是后台
- -c 查看哪一个CPU在执行这个进程
- name|pid 用名字或pid过滤
例子
(1) 查看包名为com.eat的线程,也就是com.eat应用的UI线程。
adb shell ps -t |grep com.eat
app_62 21964 141 127748 17012 ffffffff 00000000 S com.eat
UID: app_62 (程序安装的时候,系统分配的。Linux系统是多用户系统,在Android中,一个用户就相当一个应用程序。)
PID: 21964(进程ID)
PPID:141(这个是Zygote进程,因为所有的Android程序都是从这个进程“孵化”出来的。)
另外,也可以用DDMS去查看进程的信息。
(2) 查看app_62这个应用程序中所有的线程。
adb shell ps -t |grep app_62
app_62 21964 141 127748 17012 ffffffff 00000000 S com.eat
app_62 21965 21964 127748 17012 ffffffff 00000000 S HeapWorker
app_62 21966 21964 127748 17012 ffffffff 00000000 S GC
app_62 21967 21964 127748 17012 ffffffff 00000000 S Signal Catcher
app_62 21968 21964 127748 17012 ffffffff 00000000 S JDWP
app_62 21969 21964 127748 17012 ffffffff 00000000 S Compiler
app_62 21970 21964 127748 17012 ffffffff 00000000 S Binder Thread #
app_62 21971 21964 127748 17012 ffffffff 00000000 S Binder Thread #
一个崭新的应用程序包括不下10个线程,大多数都是Dalvik的内部线程。从应用程序的角度,不需要关心它们。
除了com.eat以外的其他所有线程的PPID都是21966,也就是com.eat的PID。这是因为这些线程都是从UI线程孵化出来的。
要关心的有3个线程,分别为:
app_62 21964 141 127748 17012 ffffffff 00000000 S com.eat
app_62 21970 21964 127748 17012 ffffffff 00000000 S Binder Thread #
app_62 21971 21964 127748 17012 ffffffff 00000000 S Binder Thread #
不难看出,com.eat是UI线程;另外2个Binder线程用来调用系统的一些服务,一个是ApplicationThead,一个是ViewRoo.W对象。
参考资料
本文介绍了如何通过Linux命令行工具查看Android应用的线程信息,包括使用`-t`、`-x`、`-P`、`-p`和`-c`选项来获取线程的详细状态。以实例解析了如何查找特定应用如com.eat的UI线程及其关联的线程,并解释了不同线程的角色,如Binder线程和ApplicationThread。此外,还提到了DDMS作为另一种查看进程信息的工具。
1273

被折叠的 条评论
为什么被折叠?



