Linux 查看端口占用并定位进程的方法

8次阅读

Linux 查看端口占用并定位进程的方法

linux 中查看端口占用并定位进程,最常用且高效的方法是使用 netstatss 配合 lsofkill 相关选项。核心思路是:先查哪个进程在监听或连接指定端口,再获取其 PID 进行管理。

用 ss + lsof 快速定位(推荐)

ss 是现代替代 netstat 的工具,速度快、资源占用低;lsof 则擅长按端口反查进程。组合使用最稳妥:

  • 查看 8080 端口被谁占用:sudo ss -tulnp | grep ‘:8080’
  • 若输出中含 pid=1234,直接看进程:ps -p 1234 -o pid,ppid,cmd
  • 更直接的方式(需 root 权限):sudo lsof -i :8080,结果中会显示 COMMAND、PID、USER 和 TYPE

用 netstat 查端口(兼容老系统)

虽然 netstat 已逐步被弃用,但在 centos 7 或某些定制系统中仍默认存在:

  • 列出所有监听端口及对应进程:sudo netstat -tulnp
  • 过滤特定端口(如 3306):sudo netstat -tulnp | grep ‘:3306’
  • 注意:-p 参数必须加 sudo,否则无法显示非当前用户进程的 PID/程序名

端口被占但看不到进程?可能原因和对策

有时 sslsof 显示端口占用,却找不到对应进程名,常见于以下情况:

  • 进程已崩溃但 socket 未完全释放(处于 TIME_WAIT 或 CLOSE_WAIT 状态),可等待或调整内核参数
  • 容器或 Pod 内部端口映射(如 docker),需进容器查:docker ps 找容器 ID,再 docker exec -it [ID] ss -tuln
  • SELinux 或权限限制导致 lsof 无法读取部分进程信息,可临时用 sudo setenforce 0 测试(仅调试,勿长期关闭)

终止占用端口的进程(谨慎操作)

确认目标进程无误后,可用以下方式结束:

  • 根据 PID 杀进程:sudo kill -9 1234
  • 一键杀掉所有占用某端口的进程(慎用):sudo lsof -t -i :8080 | xargs kill -9
  • 若提示 “No such process”,说明进程已退出,端口可能正处在内核回收中,稍等几秒再试
text=ZqhQzanResources