一键解决ADB端口占用问题

许多ADB奇怪的问题,都是源于5037端口被其他程序占用了,经常还是被各种XXX助手软件占用了~

怎么找到占用了5037端口的”元凶“呢?

首先,在CMD下,找到占用端口的进程PID

netstat -ano | findstr 5037 | findstr  LISTENING

TCP    127.0.0.1:5037         0.0.0.0:0              LISTENING       17024

通过这个PID,找到占用的程序

tasklist /FI "PID eq 17024"

映像名称                       PID 会话名              会话#       内存使用
========================= ======== ================ =========== ============
adb.exe                      17024 Console                    1      8,788 K

tasklist是Win下用来显示运行在本地或远程计算机上的所有进程的命令,/FI 是显示一系列符合筛选器指定的进程。

通过程序的名字,找到所在的路径

wmic process where name="adb.exe" get executablepath

ExecutablePath
C:\Android\sdk\platform-tools\adb.exe

最后是kill掉它

taskkill /F /PID 17024

这个过程也可以用Python保存起来,一键运行~

import subprocess
import os

def run_cmd(cmd, shell=True):
    stdout, stderr = subprocess.Popen(cmd, shell=shell, stdout=subprocess.PIPE, stderr=subprocess.PIPE).communicate()

    if stderr:
        print(stderr)
    result = [i.decode('gbk') for i in stdout.splitlines()]
    return result

def is_port_used(port=5037, kill=False):
    """端口占用检测

    :param port: 端口号
    :param kill: 是否kill掉占用端口的进程
    :return:
    """
    cmd = 'netstat -ano | findstr {} | findstr  LISTENING'.format(port)
    print(cmd)
    result = run_cmd(cmd)
    # print(result)
    if result:
        pid = result[0].split()[-1]

        result = run_cmd('tasklist /FI "PID eq {0}"'.format(pid))
        for i in result:
            print(i)

        program_name = result[-1].split()[0]
        print("占用的程序是{}".format(program_name))

        result = run_cmd('wmic process where name="{0}" get executablepath'.format(program_name))
        print("占用的程序所在位置:{}".format(result[2]))

        run_cmd("explorer {0}".format(os.path.dirname(result[2])))  # 打开所在文件夹
        if kill:
            run_cmd("taskkill /F /PID {0}".format(pid))  # 结束进程
    else:
        print('{}端口没有被占用'.format(port))

if __name__ == '__main__':
    is_port_used(kill=False)

你可能感兴趣的:(一键解决ADB端口占用问题)