1. 程式人生 > >【併發程式設計】通過命令列獲取執行緒資訊

【併發程式設計】通過命令列獲取執行緒資訊

命令

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物件。

參考資料