The pstree command is not provided in the Android system, so you need to use the pstree command in busybox.
Busybox download address (select the corresponding version according to the mobile phone CPU architecture):
https://busybox.net/downloads/binaries/1.28.1-defconfig-multiarch
My mobile phone CPU is armv8l architecture, so download:
https://busybox .net/downloads/binaries/1.28.1-defconfig-multiarch/busybox-armv8l
After the download is complete
adb push busybox-armv8l /system/bin/busybox
adb shell
chmod a+x /system/bin/busybox
/system/bin/busybox pstree
The user process tree in a Samsung Android 7.0 phone is as follows:
(Part of the leaves are threads. In fact, in Linux, different threads in the same process are implemented by different processes sharing resources;
only com.android.phone and com.tecent.mm two App processes, other App processes have been deleted)
init─┬─ATFWD-daemon─┬─2*[{ATFWD-daemon}]
│ ├─{Binder:717_1}
│ └─{Binder:717_2}
├─Binder:664_2───{Binder:664_1}
├─Binder:710_2─┬─{Binder:710_1}
│ ├─{Binder:710_2}
│ ├─{Binder:710_3}
│ ├─{Binder:710_4}
│ ├─{Binder:710_5}
│ ├─{Binder:710_6}
│ ├─{Binder:710_7}
│ └─8*[{netd}]
├─adbd─┬─busybox
│ ├─{->transport}
│ ├─{<-transport}
│ ├─{shell srvc 7800}
│ └─{usb ffs open}
├─adsprpcd───2*[{adsprpcd}]
├─apaservice───{Binder:652_1}
├─audiod─┬─{AudioDaemon}
│ └─{Binder:721_1}
├─audioserver─┬─{ApmAudio}
│ ├─{ApmOutput}
│ ├─{ApmTone}
│ ├─{AudioOut_15}
│ ├─{AudioOut_D}
│ ├─{Binder:685_1}
│ ├─{Binder:685_2}
│ ├─{Binder:685_3}
│ ├─{Binder:685_4}
│ ├─{FastMixer}
│ └─3*[{audioserver}]
├─auditd
├─cameraserver─┬─{Binder:687_1}
│ ├─{Binder:687_2}
│ └─{Binder:687_3}
├─connfwexe───{connfwexe}
├─ddexe───4*[{ddexe}]
├─debuggerd───debuggerd:sig
├─debuggerd64───debuggerd64:sig
├─drmserver─┬─{Binder:649_1}
│ ├─{Binder:649_2}
│ ├─{Binder:649_3}
│ ├─{Binder:649_4}
│ ├─{Binder:649_5}
│ └─{Binder:649_6}
├─edmaudit
├─fingerprintd───{POSIX timer 0}
├─gatekeeperd
├─healthd
├─imsd─┬─{Binder:668_1}
│ └─4*[{imsd}]
├─installd
├─ipacm─┬─{ipa driver ntfy}
│ ├─{ipacm}
│ └─{netlink socket}
├─ipacm-diag───{ipacm-diag}
├─jackservice───{Binder:653_1}
├─keystore
├─lmkd
├─loc_launcher─┬─lowi-server───4*[{lowi-server}]
│ └─{loc_launcher}
├─logd─┬─{logd.control}
│ ├─{logd.daemon}
│ ├─{logd.reader}
│ └─{logd.writer}
├─zygote64─┬─m.android.phone─┬─{Binder:2690_1}
│ │ ├─{Binder:2690_2}
│ │ ├─{Binder:2690_3}
│ │ ├─{Binder:2690_4}
│ │ ├─{Binder:2690_5}
│ │ ├─{Binder:2690_6}
│ │ ├─{Cat Icon Loader}
│ │ ├─{Cat Telephony s}
│ │ ├─2*[{CdmaInboundSmsH}]
│ │ ├─2*[{CdmaServiceCate}]
│ │ ├─2*[{CellBroadcastHa}]
│ │ ├─{ConnectivityThr}
│ │ ├─2*[{DcHandlerThread}]
│ │ ├─{FinalizerDaemon}
│ │ ├─{FinalizerWatchd}
│ │ ├─2*[{GsmCellBroadcas}]
│ │ ├─2*[{GsmInboundSmsHa}]
│ │ ├─{HeapTaskDaemon}
│ │ ├─{ImsAdaptorThrea}
│ │ ├─2*[{ImsModemReceive}]
│ │ ├─{ImsModemSender}
│ │ ├─{JDWP}
│ │ ├─{Jit thread pool}
│ │ ├─{Profile Saver}
│ │ ├─{RILReceiver0}
│ │ ├─{RILReceiver1}
│ │ ├─{RILSender0}
│ │ ├─{RILSender1}
│ │ ├─{ReferenceQueueD}
│ │ ├─{RenderThread}
│ │ ├─{RilMessageDecod}
│ │ ├─{Signal Catcher}
│ │ ├─2*[{Stk App Service}]
│ │ ├─{SyncHandler-0}
│ │ ├─{Thread-7}
│ │ ├─{emergencymodema}
│ │ ├─{ervice.Executor}
│ │ ├─{hwuiTask1}
│ │ ├─{hwuiTask2}
│ │ └─{pool-2-thread-1}
│ ├─system_server─┬─3*[{ActivityManager}]
│ │ ├─{AdaptiveDisplay}
│ │ ├─{AlarmManager}
│ │ ├─{AsyncQueryWorke}
│ │ ├─{AudioService}
│ │ ├─{AutoWifi}
│ │ ├─{BarTender Handl}
│ │ ├─{BatteryStats_wa}
│ │ ├─{Binder:1512_10}
│ │ ├─{Binder:1512_11}
│ │ ├─{Binder:1512_1}
│ │ ├─{Binder:1512_2}
│ │ ├─{Binder:1512_3}
│ │ ├─{Binder:1512_4}
│ │ ├─{Binder:1512_5}
│ │ ├─{Binder:1512_6}
│ │ ├─{Binder:1512_7}
│ │ ├─{Binder:1512_8}
│ │ ├─{Binder:1512_9}
│ │ ├─{Binder:1512_A}
│ │ ├─{Binder:1512_B}
│ │ ├─{Binder:1512_C}
│ │ ├─{Binder:1512_D}
│ │ ├─{Binder:1512_E}
│ │ ├─{Binder:1512_F}
│ │ ├─{CAEMgr}
│ │ ├─{CAESHubEvtHler}
│ │ ├─{CCM InternalHan}
│ │ ├─{CallAudioModeSt}
│ │ ├─2*[{CallbackHandler}]
│ │ ├─{CameraService_p}
│ │ ├─{CaptivePortalHa}
│ │ ├─{CheckTouchThrea}
│ │ ├─{ConnectivityMan}
│ │ ├─{ConnectivitySer}
│ │ ├─{ConnectivityThr}
│ │ ├─{CpuTracker}
│ │ ├─{CredentialManag}
│ │ ├─{CryptdConnector}
│ │ ├─{DLPManagerServi}
│ │ ├─{DeviceRootKeySe}
│ │ ├─{DirEncryptConne}
│ │ ├─{DirEncryptServi}
│ │ ├─{EMPackageHandle}
│ │ ├─{EnterpriseParti}
│ │ ├─{EthernetService}
│ │ ├─{FgCheckThread}
│ │ ├─{FileObserver}
│ │ ├─{FinalizerDaemon}
│ │ ├─{FinalizerWatchd}
│ │ ├─{FirewallPolicyS}
│ │ ├─{GNPProxy}
│ │ ├─{GeofenceService}
│ │ ├─{HS20StateMachin}
│ │ ├─{HeapTaskDaemon}
│ │ ├─{HongbaoModeServ}
│ │ ├─{Hs20UtilityHand}
│ │ ├─{InputDeviceLigh}
│ │ ├─{InputDispatcher}
│ │ ├─{InputReader}
│ │ ├─{InternalHandler}
│ │ ├─{IpManager.wlan0}
│ │ ├─3*[{IzatServiceBase}]
│ │ ├─{JDWP}
│ │ ├─{KeyManagementUt}
│ │ ├─{KiesUsbManager}
│ │ ├─{KioskModeServic}
│ │ ├─{KnoxCustomManag}
│ │ ├─{KnoxVpnFirewall}
│ │ ├─{KnoxVpnHandler}
│ │ ├─{LBSSystemMonito}
│ │ ├─{LazyTaskWriterT}
│ │ ├─{LicenseLogServi}
│ │ ├─2*[{LocTime}]
│ │ ├─4*[{Loc_hal}]
│ │ ├─{LocationManager}
│ │ ├─{MARsDBThread}
│ │ ├─{MARsUpdatePacka}
│ │ ├─{MDMAppUsageHand}
│ │ ├─{MdnieScenarioCo}
│ │ ├─{MountService}
│ │ ├─{NapHandler}
│ │ ├─{NetdConnector}
│ │ ├─{NetworkDatausag}
│ │ ├─{NetworkMonitorN}
│ │ ├─{NetworkPolicy}
│ │ ├─{NetworkStatsObs}
│ │ ├─{NetworkStatsThr}
│ │ ├─{NetworkStats}
│ │ ├─{NetworkTimeUpda}
│ │ ├─{NotifierInSeper}
│ │ ├─{NsdService}
│ │ ├─{PKMService}
│ │ ├─{PackageInstalle}
│ │ ├─{PackageManager}
│ │ ├─{PersonaManagerS}
│ │ ├─{PersonaPolicyMa}
│ │ ├─{PhotonicModulat}
│ │ ├─{PmsDisplayThrea}
│ │ ├─{PmsTraceDumper}
│ │ ├─{PowerManagerSer}
│ │ ├─{QualityResultHa}
│ │ ├─{QualitySocketHa}
│ │ ├─{ReferenceQueueD}
│ │ ├─{RegisterInSeper}
│ │ ├─{RenderThread}
│ │ ├─{RollbackRefresh}
│ │ ├─{SATServiceAt}
│ │ ├─{SATServiceData}
│ │ ├─{SEAMService}
│ │ ├─{SLocationeServi}
│ │ ├─{SPD}
│ │ ├─{SSRM Handler Th}
│ │ ├─{SdpLogService}
│ │ ├─{SdpManagerServi}
│ │ ├─{SensorEventAckR}
│ │ ├─{SensorHubThread}
│ │ ├─{SensorService}
│ │ ├─{SettingsProvide}
│ │ ├─{Signal Catcher}
│ │ ├─{SoundPoolThread}
│ │ ├─{SoundPool}
│ │ ├─{SyncHandler-0}
│ │ ├─{Tethering}
│ │ ├─{Thread-12}
│ │ ├─{Thread-16}
│ │ ├─{Thread-17}
│ │ ├─{Thread-19}
│ │ ├─{Thread-21}
│ │ ├─{Thread-7}
│ │ ├─{Thread-9}
│ │ ├─{TimaService}
│ │ ├─{Timer-0}
│ │ ├─{UEventObserver}
│ │ ├─{UsbHostNotifica}
│ │ ├─{UsbPortManager}
│ │ ├─{UsbService host}
│ │ ├─{VoldConnector}
│ │ ├─{WWSMPatcherThre}
│ │ ├─{WifiMaliciousHo}
│ │ ├─{WifiP2pService}
│ │ ├─{WifiRttService}
│ │ ├─{WifiScanningSer}
│ │ ├─{WifiService}
│ │ ├─{WifiStateMachin}
│ │ ├─{WifiWatchdogSta}
│ │ ├─{android.bg}
│ │ ├─{android.display}
│ │ ├─{android.fg}
│ │ ├─{android.io}
│ │ ├─{android.ui}
│ │ ├─{backup}
│ │ ├─{batterystats-sy}
│ │ ├─{context_aware}
│ │ ├─{mDnsConnector}
│ │ ├─{mSvcLEDThread}
│ │ ├─{motion_recognit}
│ │ ├─{notification-sq}
│ │ ├─{packagescan-1}
│ │ ├─{packagescan-2}
│ │ ├─{packagescan-3}
│ │ ├─{packagescan-4}
│ │ ├─{packagescan-5}
│ │ ├─{packagescan-6}
│ │ ├─{ranker}
│ │ ├─{roid.pacmanager}
│ │ ├─{scontext}
│ │ ├─{sensorThread}
│ │ ├─2*[{system_server}]
│ │ ├─{ulp_monitor}
│ │ ├─{ulp_msg}
│ │ ├─{uteStateMachine}
│ │ └─{watchdog}
│ ├─{FinalizerDaemon}
│ ├─{FinalizerWatchd}
│ ├─{HeapTaskDaemon}
│ └─{ReferenceQueueD}
├─zygote─┬─com.tencent.mm─┬─{
.mm_ANRWatchDog}
│ │ ├─{Binder:5444_1}
│ │ ├─{Binder:5444_2}
│ │ ├─{Binder:5444_3}
│ │ ├─{Binder:5444_4}
│ │ ├─{Binder:5444_5}
│ │ ├─{ConnectivityThr}
│ │ ├─{FinalizerDaemon}
│ │ ├─{FinalizerWatchd}
│ │ ├─{HalleyTempTaskT}
│ │ ├─{HeapTaskDaemon}
│ │ ├─{HttpPlatformCon}
│ │ ├─{InflateThread}
│ │ ├─{JDWP}
│ │ ├─{Jit thread pool}
│ │ ├─14*[{MM_Thread_Pool_}]
│ │ ├─{Profile Saver}
│ │ ├─{ReferenceQueueD}
│ │ ├─{Signal Catcher}
│ │ ├─{Vending-HeavyWo}
│ │ ├─{Vending-LogicTh}
│ │ ├─2*[{
com.tencent.mm}]
│ │ ├─{default}
│ │ ├─{mars::cdn}
│ │ └─{pool-1-thread-1}
│ ├─{FinalizerDaemon}
│ ├─{FinalizerWatchd}
│ ├─{HeapTaskDaemon}
│ └─{ReferenceQueueD}
├─mcDriverDaemon─┬─{McDaemon.Server}
│ └─{mcDriverDaemon}
├─mediacodec─┬─{Binder:705_1}
│ ├─{Binder:705_2}
│ └─{Binder:705_3}
├─mediadrmserver───{Binder:707_1}
├─mediaextractor─┬─{Binder:708_1}
│ ├─{Binder:708_2}
│ └─{Binder:708_3}
├─mediaserver─┬─{Binder:709_1}
│ ├─{Binder:709_2}
│ ├─{Binder:709_3}
│ └─{Binder:709_4}
├─mm-qcamera-daem─┬─20*[{CAM_imgTh}]
│ ├─{POSIX timer 0}
│ └─10*[{mm-qcamera-daem}]
├─msm_irqbalance
├─netmgrd───8*[{netmgrd}]
├─otp_server───{Binder:2539_1}
├─perfd─┬─{POSIX timer 0}
│ └─3*[{perfd}]
├─perfprofd
├─pm-proxy─┬─{Binder:497_1}
│ ├─{Binder:497_2}
│ └─{Binder:497_3}
├─pm-service─┬─{Binder:477_1}
│ ├─{Binder:477_2}
│ ├─{POSIX timer 0}
│ └─{pm-service}
├─qmuxd───3*[{qmuxd}]
├─qseecomd───qseecomd───9*[{qseecomd}]
├─rild─┬─{Binder:692_1}
│ ├─{Binder:692_2}
│ └─15*[{rild}]
├─rild───15*[{rild}]
├─rmt_storage───4*[{rmt_storage}]
├─sdp_cryptod───{sdp_cryptod}
├─secure_storage_
├─sensorhubservic─┬─{Binder:651_1}
│ ├─{Binder:651_2}
│ ├─{Binder:651_3}
│ └─{SensorHubServic}
├─servicemanager
├─smdexe───3*[{smdexe}]
├─ss_conn_daemon───5*[{ss_conn_daemon}]
├─surfaceflinger─┬─{Binder:482_1}
│ ├─{Binder:482_2}
│ ├─{Binder:482_3}
│ ├─{Binder:482_4}
│ ├─{Binder:482_5}
│ ├─{DispSync}
│ ├─{EventControl}
│ ├─2*[{EventThread}]
│ ├─{HWC_UeventThrea}
│ ├─{POSIX timer 0}
│ ├─{POSIX timer 1}
│ ├─{SDM_EventThread}
│ ├─{VSyncThread}
│ └─{surfaceflinger}
├─tftp_server
├─thermal-engine───7*[{thermal-engine}]
├─time_daemon───5*[{time_daemon}]
├─tlc_server───{Binder:2505_1}
├─tlc_server───{Binder:2506_1}
├─ueventd
├─vold─┬─sdcard
│ └─8*[{vold}]
└─wcnss_service
Note: 717 in Binder:717_1 is the process number, 1 is the thread number, see the source code:
String8 ProcessState::makeBinderThreadName() {
int32_t s = android_atomic_add(1, &mThreadPoolSeq);
pid_t pid = getpid(); //获取进程pid
String8 name;
name.appendFormat("Binder:%d_%X", pid, s); //为binder命名
return name;
}
Another:
/system/bin/busybox pstree -p 0 command can view all process trees of the Android system (kernel process + user process)
/system/bin/busybox pstree -p 2 command can view the kernel process tree of the Android system
The instructions for using the pstree command are as follows:
Usage: pstree [-p] [PID|USER]
Display process tree, optionally start from USER or PID
-p Show pids