【并发编程】通过命令行获取线程信息

命令

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对象。


参考资料

http://blog.csdn.net/manoel/article/details/39500351

你可能感兴趣的:(【并发编程】通过命令行获取线程信息)