银河麒麟系统端口被占用时,需用lsof/ss/netstat定位进程并kill释放:先验证lsof是否安装(lsof -v),再用sudo lsof -i :端口 -p -n查pid,最后用kill -15或kill -9终止对应进程。

银河麒麟系统启动服务时提示“Address already in use”,说明目标端口已被其他进程独占,必须通过命令行精准定位并终止对应进程才能释放端口。
确认lsof是否可用
银河麒麟V10多数版本预装lsof,但精简镜像可能缺失。打开终端执行lsof -v——若返回类似lsof version 4.94的输出,则工具就绪;若提示command not found,需先安装。
根据底包类型选择安装命令:
Debian/Ubuntu系(如麒麟V10 SP1):运行sudo apt-get update && sudo apt-get install lsof
CentOS/RHEL系(如麒麟V10 SP3):运行sudo yum install lsof或sudo dnf install lsof。
安装后务必再执行lsof -v验证是否成功。
定位占用指定端口的进程
方法一:用lsof查PID(推荐)
执行sudo lsof -i :9090 -P -n——【-P -n参数必须加,否则DNS和服务名解析会卡死终端】。输出中第二列为PID,第三列为COMMAND(如cockpit、java),NAME列末尾带(LISTEN)即为监听者。
方法二:用ss快速过滤
执行sudo ss -tulnp | grep ':9090'——该命令依赖root权限显示进程名,若COMMAND列为空,说明内核未暴露/proc/[pid]/exe路径,此时应切回lsof。
方法三:用netstat兼容旧环境
若提示netstat: command not found,先安装net-tools:sudo apt install net-tools(Debian系)或sudo yum install net-tools(RHEL系)。再执行sudo netstat -tulnp | grep ':9090'。
终止进程释放端口
第一步:提取PID
从lsof输出中抄下第二列数字,例如12345;也可用命令一键提取:sudo lsof -t -i :9090,它只输出PID,无多余字段。
第二步:发送终止信号
优先尝试温和终止:kill -15 12345。若进程无响应,再执行强制终止:kill -9 12345。
第三步:验证端口是否空闲
重新运行sudo lsof -i :9090 -P -n,若无任何输出,说明端口已释放。
注意:若PID为1(即systemd),且COMMAND为cockpit,说明是银河麒麟内置的Web管理服务占用了9090端口。此时不应kill -9,而应停用服务:sudo systemctl stop cockpit cockpit.socket && sudo systemctl disable cockpit cockpit.socket。











