adb程序是被誰啟動的?

2021-09-25 13:39:32 字數 3014 閱讀 5031

背景

這兩天在排查自動化測試平台中,adb.exe 開啟過多的問題。(200個)

這是乙個很糟糕的表現,當客戶端的連線數過多時,會對 android 的 adbd 帶來過多的 socket 連線,進而影響系統效能。

開始排查

僅僅通過在開啟 adb 的位置加 log,並不能取得什麼效果。程式裡用的是 runtime.exec 去執行 adb 命令,通過單獨執行這樣的**,測試半個小時,未見 adb.exe 增多的情況。從測試平台的**上,已經沒有什麼大的突破口了

找到突破口

於是從 windows 側尋找突破點,畢竟程序是在 windows 上處於未關閉的狀態,那麼是否有相關的 windows 工具能夠檢查某個程序的?是的,使用 windows 命令 tasklist 檢視當前的 adb 程序

c:\>tasklist |findstr adb.exe

adb.exe 19136 console 1 13,572 k

adb.exe 16380 console 1 9,308 k

adb.exe 6868 console 1 9,316 k

雖然能夠看到個數,但是它究竟是誰啟動的,怎麼啟動的,一無所獲。這給排查帶來了阻礙。

再嘗試有沒有別的指令,能夠獲取更詳細的資訊?沒錯,就是 wmic,它簡直比 tasklist 強大 100倍。

c:\>wmic process where name="adb.exe" get /format:value

caption=adb.exe

commandline=adb logcat

creationclassname=win32_process

creationdate=20190724151227.904509+480

cscreationclassname=win32_computersystem

csname=chj-thinkpad-hw

description=adb.exe

executablepath=d:\android-sdk\platform-tools\adb.exe

executionstate=

handle=14980

handlecount=218

installdate=

kernelmodetime=389062500

maximumworkingsetsize=1380

minimumworkingsetsize=200

name=adb.exe

oscreationclassname=win32_operatingsystem

osname=microsoft windows 10 專業版|c:\windows|\device\harddisk1\partition1

otheroperationcount=584392

othertransfercount=63483134

pagefaults=218485

pagefileusage=9300

parentprocessid=1700

peakpagefileusage=15612

peakvirtualsize=175087616

peakworkingsetsize=12400

priority=8

privatepagecount=9523200

processid=14980

quotanonpagedpoolusage=24

quotapagedpoolusage=215

quotapeaknonpagedpoolusage=286

quotapeakpagedpoolusage=216

readoperationcount=1

readtransfercount=1732

sessionid=1

status=

terminationdate=

threadcount=6

usermodetime=103906250

virtualsize=161447936

windowsversion=10.0.16299

workingsetsize=11182080

writeoperationcount=764

writetransfercount=775

以上命令輸出了關於 adb.exe 這個程序比較詳細的資訊,發現有兩行非常管用

commandline=adb logcat 和 executablepath=d:\android-sdk\platform-tools\adb.exe

記錄了此程序是通過什麼命令執行以及它的啟動路徑。於是我們據此就可以排查,是什麼命令未正常關閉,從而更有針對性的去解決 adb 開啟過多的問題。

該命令可以進一步簡化我們只需要的兩條關鍵資訊

c:\>wmic process where name="adb.exe" get commandline,executablepath

commandline executablepath

adb -l tcp:5037 fork-server server --reply-fd 596 d:\asset\android-sdk\platform-tools\adb.exe

adb logcat d:\tools\android-sdk-windows\platform-tools\adb.exe

第一條是 asset 目錄下開啟的 adb server,第二條 tools 目錄下 adb client 執行的 adb logcat 命令,定位得非常清晰了。

你的胸懷是被誰撐大的?

有句話說 乙個人的成就有多大,取決於他的胸懷有多大 自從帶團隊這幾年,對這句話的感受尤為深切。組織行為學裡面有句話說 屁股決定大腦 就是本位主義,人的大腦很多時候喜歡被他的屁股 個人立場 控制。無論工作熱情有多高,能力有多強,沒有寬闊的胸懷,很難走到更高的管理崗位,俗話說 性格決定命運 與自己不喜歡...

你的胸懷是被誰撐大的?

有句話說 乙個人的成就有多大,取決於他的胸懷有多大 自從帶團隊這幾年,對這句話的感受尤為深切。組織行為學裡面有句話說 屁股決定大腦 就是本位主義,人的大腦很多時候喜歡被他的屁股 個人立場 控制。無論工作熱情有多高,能力有多強,沒有寬闊的胸懷,很難走到更高的管理崗位,俗話說 性格決定命運 與自己不喜歡...

adb命令檢視apk資訊, adb啟動你的apk

1.用adb獲得手機裡面某個apk的應用資訊 版本資訊 adb shell dumpsys package com.sy.a268 2.列出所有 adb shell dumpsys 3.用adb啟動apk adb shell am start n com.sy.a268 com.sy.a268.ma...