首选ss命令快速定位端口占用进程(性能最优),其次lsof最直观精准反查,netstat兼容旧系统,fuser支持一键终止;均需sudo权限获取完整信息。

直接查出哪个进程占着端口,是解决服务启动失败、端口冲突最核心的一步。关键不是“有没有被占”,而是“被谁占、怎么停”。下面这几种方法,覆盖大多数场景,按推荐顺序排列。
用 ss 命令快速定位(首选,系统自带、速度快)
现代 Linux 发行版默认预装 ss,比 netstat 更轻量,尤其在高并发时响应快。查端口只需一条命令:
-
查所有监听中的 TCP/UDP 端口及对应进程:
sudo ss -tulnp -
精准查某个端口(比如 8080):
sudo ss -tulnp | grep ':8080'
输出中 PID/Program name 列直接显示进程 ID 和程序名,例如 1234/nginx 或 5678/java。注意加 sudo,否则可能看不到其他用户的进程信息。
用 lsof 命令按端口反查进程(最直观,适合单点排查)
lsof 的优势是“端口 → 进程”路径非常干净,不依赖协议类型判断。但需 root 权限,部分系统默认未安装:
-
查指定端口(如 3306)占用情况:
sudo lsof -i :3306 -
只显示 PID 和命令名(简洁输出):
sudo lsof -ti :3306(返回纯数字 PID,方便脚本调用)
输出示例:mysqld 1234 mysql 9u IPv6 1234567 0t0 TCP *:mysql (LISTEN) —— 一眼就能确认是 mysqld 进程在监听。
用 netstat 查看(兼容老环境,需手动安装)
netstat 在 CentOS 7 以前或某些最小化系统中仍常见,但新版发行版常需额外安装:
-
安装(Ubuntu/Debian):
sudo apt install net-tools -
安装(CentOS/RHEL):
sudo yum install net-tools -
查端口(如 80):
sudo netstat -tulnp | grep ':80'
参数含义统一:-t(TCP)、-u(UDP)、-l(仅监听态)、-n(数字地址)、-p(进程信息)。输出格式和 ss 类似,PID/Program name 位置明确。
用 fuser 快速杀进程(查+停一步到位)
如果目标明确只想终止占用进程,fuser 可以跳过查看环节直接操作:
-
查占用 8080 端口的 PID:
sudo fuser 8080/tcp -
强制终止该端口所有相关进程:
sudo fuser -k 8080/tcp
注意:-k 会直接 kill 进程,慎用于生产环境;建议先用 lsof 或 ss 确认进程是否可安全终止。


















