银河麒麟系统端口被占时应优先用sudo lsof -i :端口 -p -n查pid,未装需先apt/yum安装;查到pid后先kill 12345再kill -9 12345,docker-proxy等需容器内排查。

银河麒麟系统启动服务时提示“Address already in use”,说明目标端口正被某个进程独占,必须通过终端精准定位并终止该进程,否则新服务无法绑定端口、调试失败、Web应用无法访问。
确认lsof是否可用并安装
先检查系统是否已预装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验证——没这步,后续所有端口查询都会失败。
用sudo lsof精准查出占用端口的PID
执行命令:sudo lsof -i :8080 -P -n(将8080替换成你要查的实际端口号)。
【-P -n参数必须加】:不加会导致DNS反向解析卡顿甚至假死,尤其在内网无DNS服务器时,命令可能挂起30秒以上。
输出中第二列为PID(如12345),第三列为COMMAND(如java或node),NAME列末尾带(LISTEN)即为真凶。若COMMAND显示docker-proxy,说明是容器映射导致,别急着kill宿主机PID——得进容器里处理。
分两步终止进程:先温和再强制
第一步:发送SIGTERM信号,给程序自我清理机会
执行kill 12345(把12345换成上一步查到的真实PID)。正规程序通常2秒内退出,会保存临时数据、释放文件锁、断开数据库连接。
第二步:验证是否退出
执行ps -p 12345。若返回空行,说明已干净退出;若仍有输出,说明它已僵死或屏蔽信号,必须强杀。
第三步:执行不可逆强制终结
kill -9 12345。这步会立即释放全部内存页,未写入磁盘的缓冲区数据永久丢失——比如你刚在VS Code里改了但没保存的配置文件,现在就没了。
替代方案:用ss快速核对结果
若lsof因权限或兼容性问题异常,可用ss交叉验证:
执行sudo ss -tulnp | grep ':8080'。
注意:必须加sudo,否则COMMAND列为空或显示-,根本看不到是谁占的端口。
看到PID后,仍要回到kill -9 PID流程执行终止——ss只负责查,不负责杀。











