移动测试基础 吐槽各种程序自带 adb.exe 导致 adb 无法正常使用

xuxu · 2015年03月11日 · 最后由 securitytest 回复于 2017年09月26日 · 2644 次阅读
本帖已被设为精华帖!

经常出现下面的错误:

E:\>adb devices
adb server is out of date.  killing...
ADB server didn't ACK
* failed to start daemon *
error: unknown host service

相信很多人都遇到过,解决办法:

netstat -ano | findstr 5037 | findstr LISTENING

然后再 kill 掉该进程,但很烦的是有时候杀掉了也没用,原因就是启动的 adb 进程不是 sdk 下的,而是一些应用软件的。我是下午用了下阿里旺旺,就出现了这个问题。最后只能找到进程,然后找到进程所在文件,删掉其自带的 adb 程序。。

对我这个懒货来讲,对于经常碰到的问题,每次都这样去解决就嫌太麻烦,有同学经常说学了 python 也不知道干嘛,接下来就用 python 进行偷懒,需求是找到占用 5037 端口的进程,找到进程后直接打开创建该进程的文件,其所在的文件夹(用于确认是否需要删除掉该文件夹),同事 kill 掉占用该端口的进程。这里获取进程所在路径用到了 wmic。

# -*- coding: utf-8 -*-

import os
import platform

#5037端口占用时,打开该进程路径,且杀掉占用该端口的进程(只支持Windows)

def win():
    pid = os.popen("netstat -ano | findstr 5037 | findstr  LISTENING").read().split()[-1]

    #下面的命令执行结果,可能因电脑而异,若获取adb.exe时出错,可自行调试!
    #E:\>tasklist /FI "PID eq 10200"
    #
    #Image Name                     PID Session Name        Session#    Mem Usage
    #========================= ======== ================ =========== ============
    #adb.exe                      10200 Console                    1      6,152 K

    process_name = os.popen('tasklist /FI "PID eq %s"' %pid).read().split()[-6]

    #获取进程路径
    process_path = os.popen('wmic process where name="%s" get executablepath' %process_name).read().split("\r\n")[1]
    #分割路径,得到进程所在文件夹名
    name_list = process_path.split("\\")
    del name_list[-1]
    directory = "\\".join(name_list)
    #打开进程所在文件夹
    os.system("explorer.exe %s" %directory)
    #杀死该进程
    os.system("taskkill /F /PID %s" %pid)

if __name__ == "__main__":
    win()
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
共收到 15 条回复 时间 点赞

阿里旺旺还带了 adb?那么傻逼?

#1 楼 @lihuazhang 很多工具都带啊, qq 暴风影音 各种应用市场之类的. 最让我火大的是暴风影音, 直接强行安装应用. 还有一些程序汇偷偷植入手机多跟 app, 有一些 app 还没图表, 很容易隐藏在手机里面.

#2 楼 @seveniruby 我是搞不懂阿里旺旺为啥要用到 adb

xuxu #4 · 2015年03月12日 Author

@lihuazhang
还不是为了方便安装自己的应用。。

#3 楼 @lihuazhang 因为这些应用要往手机里面安装软件!

我来写个 java 版本的

喜欢你种解决问题的态度,点赞。

貌似最后两行某有用吧。

#8 楼 @anonymity 最后两行是程序入口。加上这两行就能直接运行这个 py 文件来杀进程了。

#6 楼 @young 写了吗,哈哈,坐等你的神回复

金山毒霸自带的金山手机助手中的……

只要 1 行就可以杀应用进程了,测试后效果 OK 的
taskkill /f /im adb.exe

也可以杀死其他的 windows 应用
附:
/IM image name 指定要终止的进程的图像名。通配符 '*'可用来指定所有图像名。
图像名在这里就是应用进程

xuxu #13 · 2015年04月10日 Author

@keen_lau 确实可以,但进程名并不都是 adb.exe 的。

#13 楼 @xuxu 确实想的不全面,还是得想想

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册