如何终止Python中由Socket创建的占用端口的进程?
解决UDP端口占用且无法终止的问题
步骤1:精准定位占用端口的进程
- 以管理员身份打开CMD,替换
[你的端口号]执行命令,找到对应进程ID(PID):netstat -ano -p udp | findstr :[你的端口号] - 执行命令查看进程名称,确认是否为系统进程或第三方程序:
tasklist /fi "pid eq [PID]"
步骤2:强制终止进程
- 尝试用CMD强制终止进程(包含子进程):
taskkill /f /pid [PID] /t - 若CMD执行失败,切换到管理员权限的PowerShell执行:
Stop-Process -Id [PID] -Force
步骤3:排查系统服务占用
- 按下
Win+R输入services.msc打开服务管理器,搜索步骤1中查到的进程名称,找到对应服务:- 先停止该服务,再将启动类型改为手动,避免自动重启占用端口。
步骤4:修改代码避免后续端口占用问题
在绑定端口前添加套接字选项,允许端口复用,即使端口处于等待状态也能重新绑定:
import socket serverIP = input() serverPort = int(input()) server_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # 添加端口复用选项 server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEPORT, 1) try: server_socket.bind((serverIP, serverPort)) except OSError: print("Already in use") exit()
步骤5:极端情况修改注册表缩短端口释放时间
如果重启后端口仍被占用,可修改注册表调整UDP端口闲置超时:
- 按下
Win+R输入regedit打开注册表编辑器 - 定位到路径:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters - 右键空白处新建DWORD(32位)值,命名为
UdpIdleTimeout,设置十进制值为30(单位:秒) - 重启电脑生效
内容的提问来源于stack exchange,提问作者Erri000
相关产品推荐
相关产品推荐

