您现在的位置是:休闲 >>正文

5037端口被adb自己占用

休闲8人已围观

简介下午三点,Android开发工具突然罢工。adb devices列出空列表,可模拟器明明在跑。翻日志,发现5037端口被占用——不是别的进程,是adb自己。 这毛病我遇过不下五次。每次都得kill掉所 ...

下午三点,端口Android开发工具突然罢工。自己占用adb devices列出空列表,端口可模拟器明明在跑。自己占用翻日志,端口发现5037端口被占用——不是自己占用别的进程,是端口adb自己。

这毛病我遇过不下五次。自己占用每次都得kill掉所有adb进程再重启,端口像给电脑做心肺复苏。自己占用可为什么adb会自己占自己的端口端口?查了一圈,问题出在adb server的自己占用启动机制上。

adb靠一个server进程管理所有设备通信,端口这个server默认监听5037。自己占用当你连着设备,端口又用不同用户权限或不同环境变量启动adb时,系统可能拉起第二个server。第二个server发现端口被占,本该退出,但它没退干净——残留进程还握着端口。第一个server反而被误判为异常,新请求全被拒。

更常见的是IDE和命令行混用。Android Studio自带adb,你终端里也配了adb。两个版本不同,路径不同,启动时各拉各的server。后启动的检测到端口冲突,本该报错退出,但某些版本会静默失败,留下僵尸进程。这时候你看到的就是adb占用了自己的端口。

还有个隐蔽场景:USB断开重连时,adb server在等设备响应,此时你手动执行adb kill-server,紧接着adb start-server。旧server还没完全释放socket,新server已经抢着绑端口——绑定失败,但进程没死,处于半瘫痪状态。这种状态最坑,进程列表里看着正常,实际啥也干不了。

解决办法其实粗暴有效:
1. adb kill-server
2. 检查5037端口:netstat -ano | findstr 5037(Windows)或lsof -i:5037(Mac/Linux)
3. 找到残留PID,直接kill -9(Windows下taskkill /F /PID)
4. 重新adb start-server

还不够的话,查环境变量。终端里which adb和Android Studio的SDK路径是否一致。不一致就统一成一个版本,别让两个adb打架。

说到底,这是adb设计上的一个坑——server进程没有做端口占用的强校验,只靠“发现冲突就退出”的软逻辑。遇上进程调度延迟或异常退出,这逻辑就漏了。Google在后续版本加了端口互斥锁,但老版本和某些厂商定制版还是老样子。

现在每次连不上设备,我第一反应不是查驱动,而是先看5037。十有八九又是adb自己人打自己人。你遇到过没?评论区聊聊,看看还有啥奇葩占用姿势。

Tags:

相关文章

  • 看直播抽俄钓稀有道具

    休闲

    直播画面里,老K的鱼竿弯成一张弓,线杯吱吱作响。他嘴里念叨着“别切别切”,手却稳得不像话。弹幕刷得飞快,全是“出金出金”。这是昨晚十一点,俄钓四的官方直播间,正在抽稀有道具——一条名为“帝王鲑”的传说 ...

    【休闲】

    阅读更多
  • 关键词优化

    休闲

    上周帮一个做手工皮具的朋友看店铺后台,他指着搜索词报告问我:“‘手工钱包’这个词我标题里明明写了,怎么每天只有两三个曝光?”我扫了一眼他的标题——「匠心手作·头层牛皮短款钱包·复古男士礼物」。问题就出 ...

    【休闲】

    阅读更多
  • 彩民中奖技巧分享

    休闲

    ```html 彩民中奖技巧分享 body { font-family: "Microsoft YaHei", "PingFang SC", sans-serif; line-height: ...

    【休闲】

    阅读更多


友情链接