正常應該是這樣的 android
咱們看下源碼 socket
這裏咱們看到兩個分支, if(fd==-2){ 函數
//根據註釋 之前還沒啓動過服務 就走這個分支 oop
}else{ 日誌
當前進程已經有這個服務在運行就走這個分支 server
} 進程
根據上面的打印的日誌 很明顯羣裏的這位朋友已經執行了這個服務,由於它走進了第二個分支。 源碼
可是他在任務管理器中又找不到adb服務。 cli
咱們來看下android是怎麼判斷服務已經在進程中的。即什麼狀況下int _adb_connect(const char *service)返回-2. service
只有當fd<0時纔會返回-2. 即fd = socket_loopback_client(__adb_server_port, SOCK_STREAM);建立失敗
傳入兩個參數分別爲端口號和TCP類型的一個常量。adb是面向鏈接的,因此SOCK_STREAM是不變的常量,能致使函數調用失敗的
必然是由於咱們傳入了一個不適合的值,這個值只能是端口號。由程序知 __adb_server_port=5037.
得出結論 5037端口號被其它程序佔用了(只能是佔用,我想不出還有其它可能)。
而後就簡單了
dos窗口運行
找到佔用5037端口號的進程
獲取調用進程的程序,我這裏就是adb程序。而後在任務管理器中殺死該進程就不會出現adb沒法啓動了。