银河麒麟命令行查看端口占用方法
银河麒麟系统端口被占用时,可用lsof、ss或netstat排查。推荐lsof-i:端口号-P-n查看进程,用kill-15或-9终止。注意容器映射端口不可直接杀宿主机PID。
在银河麒麟系统上运行服务时,若遇到“Address already in use”或绑定端口失败的问题,通常意味着该端口已被其他进程占用。无需惊慌,借助几个命令行工具即可快速定位并释放端口——推荐使用lsof、ss或netstat,选择顺手的一款即可。

下面将逐步演示完整流程:从确认工具是否安装,到找出占用进程,最终安全终止它,全程覆盖。
确认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确认无误,即可继续下一步。
查看指定端口被哪个进程占用
这是最常见的使用场景——明确知道端口号(如8080),但服务无法启动。以下三种方法任选其一。
方法一:lsof(推荐)
执行:sudo lsof -i :8080 -P -n
注意【-P -n参数必须添加,否则DNS和服务名解析会显著拖慢响应,甚至导致卡死】。命令输出中第二列为PID,第三列为COMMAND(如java、nginx、docker-proxy),NAME列末尾带有(LISTEN)的即为监听进程,目标锁定。
方法二:ss(现代替代方案)
执行:sudo ss -tulnp | grep ':8080'
需注意ss -tulnp需要root权限才能显示进程名,否则COMMAND列可能为空或显示-。若仍无法显示进程名,说明内核未暴露/proc/[pid]/exe路径,此时使用lsof更可靠。
方法三:netstat(兼容旧环境)
若提示command not found,先安装net-tools:Debian系执行sudo apt install net-tools,RHEL系执行sudo yum install net-tools。然后运行:sudo netstat -tulnp | grep ':8080'。
查看所有监听端口及其对应进程
如果不确定具体哪个端口被占用,或想全局了解系统开放的服务,可参考以下方法。
第一步:列出全部TCP监听端口
sudo lsof -iTCP -sTCP:LISTEN -P -n
第二步:过滤出非系统保留端口(1024以上)
sudo lsof -iTCP -sTCP:LISTEN -P -n | awk '$9 ~ /:[0-9]{4,}/ {print}'
此步骤可排除sshd(22)、rsyslog(514)等基础服务,专注于应用端口,提高排查效率。
第三步:识别可疑进程
观察COMMAND列。若出现docker-proxy或containerd,说明端口被容器映射占用,此时需进入容器内部排查,不可直接kill宿主机上的PID。若COMMAND为node或java但PID异常高(如超过30000),很可能是开发环境残留进程。
快速终止占用端口的进程
找到占用进程后,即可将其释放。提供两种方式:
方法1:使用fuser一键杀掉(慎用)
sudo fuser -k 8080/tcp
此命令会向所有占用8080端口的TCP进程发送SIGKILL信号。【该操作不可逆,且可能同时杀死多个关联进程,请提前确认COMMAND中无关键服务】
方法2:手动kill指定PID(推荐)
先从lsof输出中获取PID(第二列),尝试优雅终止:sudo kill -15 12345。等待3秒后检查端口是否释放:sudo lsof -i :8080。若进程仍在,再使用sudo kill -9 12345强制杀掉。此方式更安全,避免误伤其他依赖进程。
