经常出现下面的错误:
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()