Have a Question?

如果您有任务问题都可以在下方输入,以寻找您想要的最佳答案

查看端口占用并结束进程,Linux查看端口占用命令

查看端口占用并结束进程

题图来自Unsplash,基于CC0协议

导读

  • 如何查看端口占用 Windows
  • netstat命令查看端口占用及PID
  • Windows下结束占用端口的进程 taskkill
  • Linux查看端口占用命令
  • Linux结束端口占用进程 kill lsof
  • 如何确认端口已被释放
  • 端口占用问题常见原因
  • 在日常开发和运维工作中,端口占用问题是最常见的网络故障之一。当一个端口被某个进程占用时,其他程序尝试绑定同一端口就会失败,通常表现为“地址已在使用”或“端口已被占用”的错误提示。以下我们将从 Windows 和 Linux 两个主流操作系统出发,详细介绍如何查看端口占用、找到对应的进程并结束它,最后还会梳理端口占用的常见原因以及如何确认端口已被释放。

    一、Windows 下查看端口占用

    在 Windows 系统中,最经典和通用的命令是 netstat。它能够显示当前所有网络连接、监听端口以及对应的进程标识符(PID)。打开命令提示符(CMD)或 PowerShell,运行以下命令:

    netstat -ano | findstr :端口号

    参数说明:-a 显示所有连接和监听端口,-n 以数字形式显示地址和端口号,-o 显示关联的进程 PID。例如要查看 8080 端口是否被占用,可以输入:

    netstat -ano | findstr :8080

    返回结果中会列出该端口的协议(TCP/UDP)、本地地址、状态以及最后一列的 PID。如果该端口被占用,状态通常是 LISTENING(监听)或 ESTABLISHED(已建立连接)。

    获得 PID 之后,可以通过任务管理器或者命令行工具来查找具体进程。在任务管理器中,切换到“详细信息”选项卡,找到对应 PID 的进程名称即可。如果使用命令行,可以用 tasklist 命令:

    tasklist | findstr PID号码

    二、Windows 下结束占用端口的进程

    找到占用端口的进程后,可以使用 taskkill 命令强制终止。命令格式为:

    taskkill /PID 进程PID /F

    /F 表示强制结束进程。例如要结束 PID 为 12345 的进程,执行:

    taskkill /PID 12345 /F

    如果进程名称已知,也可以直接通过名称杀死(但不推荐,因为可能误杀同名进程):

    taskkill /IM 进程名称.exe /F

    执行后系统会提示“成功: 已终止 PID 为 xxx 的进程”,此时该端口就被释放了。

    三、Linux 下查看端口占用

    Linux 下查看端口占用的方法更丰富,最常用的是 lsofss 命令。lsof(list open files)可以列出当前系统打开的所有文件,在 Linux 中网络套接字也被视为文件。使用以下命令查看指定端口的占用情况:

    lsof -i :端口号

    例如查看 8080 端口:

    lsof -i :8080

    输出会显示进程的 PID、进程名称、文件描述符以及协议等信息。如果提示命令未找到,需要安装 lsof(通常发行版默认包含,若没有则通过包管理器安装,如 apt install lsofyum install lsof)。

    另一个快速工具是 ss,它是 netstat 的现代替代品,效率更高:

    ss -tlnp | grep :端口号

    -t 显示 TCP,-l 显示监听中的端口,-n 显示数字地址,-p 显示进程信息。输出会列出关联的 PID 和进程名称。

    如果系统中没有 lsofss,传统 netstat 命令也可以使用(需要安装 net-tools 包):

    netstat -tlnp | grep :端口号

    四、Linux 下结束占用端口的进程

    得到 PID 后,使用 kill 命令终止进程。常用方式:

    kill -9 PID号码

    -9 表示发送 SIGKILL 信号,强制终止进程。也可以先尝试 kill PID(默认 SIGTERM),请求进程正常退出,如果无效再使用 -9

    例如要结束 PID 为 12345 的进程:

    kill -9 12345

    同样,也可以直接使用 lsof 结合管道一次性完成查找和杀死(但需谨慎,确保不会误杀其他进程):

    lsof -ti :端口号 | xargs kill -9

    -t 选项使 lsof 只输出 PID,配合 xargs 将 PID 传递给 kill 命令。

    五、如何确认端口已被释放

    结束进程后,我们需要验证端口确实已释放,才能确保其他程序可以正常绑定。验证方法很简单,重复执行之前的查看命令即可:

    • Windows:再次运行 netstat -ano | findstr :端口号,如果没有任何输出,说明该端口已经不在监听状态。
    • Linux:运行 lsof -i :端口号ss -tlnp | grep :端口号,若无返回结果,表示端口已释放。

    另外,也可以使用其他主机或工具尝试连接该端口(例如 telnet 127.0.0.1 端口号),如果连接被拒绝,同样说明端口已释放。但要注意,某些服务可能启动较慢,刚杀死进程后立即检查可能没问题,但若系统有自动重启策略,服务可能会立即重新绑定端口。

    六、端口占用问题的常见原因

    了解端口被占用的常见原因,有助于从根源上避免问题反复出现:

    1. 服务未正确关闭:最常见的情况是开发或测试过程中,启动了 HTTP 服务器(如 Tomcat、Node.js、Nginx)后,直接关闭了终端窗口而未优雅终止服务,导致进程在后台继续监听端口。
    2. 多个实例冲突:同一台机器上启动了多个相同服务的实例,例如同时启动了两个 Spring Boot 应用都使用 8080 端口。
    3. 系统服务或安全软件占用:某些系统服务(如 Windows 上的 World Wide Web Publishing Service、SQL Server)或安全软件(防火墙、杀毒软件)可能会占用特定端口。
    4. 残留进程:程序崩溃后,子进程或守护进程未被正确清理,仍然持有端口。
    5. 端口被其他应用程序抢占:例如 Skype、TeamViewer 等软件可能会随机占用一些常用端口。
    6. 防火墙或虚拟网络设备:某些虚拟网卡或 VPN 软件会绑定端口,造成实际服务无法绑定。
    7. 端口范围限制:在某些受限环境中,系统可能只允许特定端口范围,或者临时端口被耗尽(常见于大量短连接场景)。

    解决端口占用问题的核心思路是:先定位占用端口的进程,然后根据实际情况决定是杀掉该进程、修改配置使用其他端口,还是排查该进程是否本就应该运行(例如系统服务)。如果确定某个端口必须被占用(如数据库端口),那么启动新服务时应选择不同的端口。

    © 版权声明

    本文由盾科技原创,版权归 盾科技所有,未经允许禁止任何形式的转载。转载请联系candieraddenipc92@gmail.com