Have a Question?

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

查看端口被哪个进程占据,lsof -i :port number example

查看端口被哪个进程占据

题图来自Unsplash,基于CC0协议

导读

  • how to check which process is using a port in Windows
  • find port usage process Linux command
  • netstat show process using port
  • lsof -i :port number example
  • check port PID Windows PowerShell
  • port in use by another process error
  • how to kill process using a port
  • 如果你遇到“端口已被占用”或“该端口在使用中”的错误,或者你想了解哪个应用程序正在使用特定的网络端口,可以使用以下方法进行排查。

    查找占据端口的进程

    当你在 Windows 或 Linux 系统上运行网络应用程序时,有时会出现端口冲突。要找出哪个进程(程序)占用了某个特定的端口,可以按照以下步骤操作:

    Windows 系统

    1. 使用 netstat 命令查找端口:
      • 打开命令提示符 (cmd) 或 PowerShell。
      • 输入以下命令并按回车:
        netstat -aon -p tcp
        • -aon 参数会列出所有活动连接和监听端口,并显示对应的 PID(进程标识符)。
        • -p tcp 指定只查看 TCP 协议的端口(如果你关心 UDP 端口,可以替换为 -p udp 或去掉此参数查看两者)。
      • 内容会很长,寻找你关心的端口号(比如 8080)。你会看到类似 TCP 0.0.0.0:8080 0.0.0.0:0 LISTENING 1234 的行。
      • 关键在于最后的数字( PID ),它代表了占用该端口的进程的唯一编号。

    定位进程 ID (PID)

    1. 查找 PID 对应的进程名:
      • 打开 任务管理器
        • 通过 Ctrl + Shift + Esc 快捷键直接打开。
        • 或者右键点击任务栏,选择“任务管理器”。
      • 在“进程”选项卡中,通常按 CPU、内存或磁盘使用率排序。
      • 找到 PID 列,并在列表中找到与上一步骤中获得的那个 PID 完全匹配的行。
      • 该进程的名称即为占用该端口的应用程序。
        • 在 PowerShell 中,你也可以再次执行命令:
          get-process -id <PID>

          <PID> 替换为你找到的实际数字。

    Linux/MacOS 系统

    Linux 和 macOS 图形界面和命令行工具非常相似。

    1. 使用 netstat 命令查找端口:
      • 打开终端。
      • 输入以下命令并按回车:
        netstat -an | grep <端口号>| grep LISTEN

        或者(如果你安装了 nmap,还可以使用):

        sudo nmap -p <端口号> -sS localhost

        <端口号> 替换为你实际关心的端口号(如 80)。

      • 查找显示 LISTEN 状态的对应端口。这条命令可能会列出不太易读的信息,你关注的是与你指定端口号关联的 LISTEN 状态。
      • 在输出中,你会看到类似 tcp 0 0 0.0.0.0:<port> 0.0.0.0:* LISTEN <PID> 的行。找到你的端口号后,注意 LISTEN 左侧或其后的进程 ID。某些版本的 netstat 可能不是这样显示 PID。

    Linux 专用方法:使用 lsof

    1. 使用 lsof 命令查找具体进程:
      • lsof 是一个专门列出打开文件的工具,网络端口被视为文件描述符。
      • 在终端输入:
        sudo lsof -i :<端口号>

        <端口号> 替换为你关心的端口号。

      • 你需要输入系统当前用户的密码(如果你未预先配置免密码sudo和不知道具体用户)。
      • 输出会直接显示哪些进程 (COMMAND) 正在使用该端口,以及对应的 PIDUSER

    如何停止使用端口的进程

    一旦你确定了占用端口的进程,你可以选择:

    1. 停止该应用程序:

      • Windows 任务管理器中,选中该进程,点击“结束任务”。
      • Linux/MacOS 终端中,使用 kill 命令:
        sudo kill -9 <PID>

        同样替换 <PID>请谨慎使用 kill -9,因为它会强制终止进程,可能导致不稳定。

      • 注意: 强制终止系统核心服务或关键应用程序的进程可能导致系统问题或数据丢失。如果该进程是安全的后台应用,可以尝试先使用 kill (不带 -9),看看是否会正常退出。尝试在应用程序内更改监听端口通常是更好的方法。
    2. 修改应用程序配置文件:

      • 登录到占用端口的应用程序配置文件(如果可用)。
      • 找到监听端口的配置项(通常是 Port, port, Listen, address 等)。
      • 将端口号改为一个未被使用的、且应用程序支持的数字(例如 8081)。
    3. 更改监听地址:

      • 某些应用程序允许你更改它们监听的网络接口。可能不常用,但可以尝试看看是否能解决访问特定物理网卡上的某个应用端口冲突。
      • 例如,设置成只监听 127.0.0.1 (仅本地) 或特定的 IP 地址。

    总结

    当遇到端口占用问题时,首先使用系统自带的 netstat(在 PowerShell 中)或 lsof(在 Linux/MacOS 终端)等命令进行排查,了解哪个进程占用了目标端口。根据需要,可以选择终止该进程或修改应用程序本身来避免端口冲突。请注意相关操作的潜在风险。希望这些方法能帮助你解决问题!

    © 版权声明

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