如何确定哪个进程正在侦听Windows上的TCP或UDP端口?


当前回答

如果需要GUI,请使用TCPView。这是微软收购的旧Sysinternals应用程序。

其他回答

如果有人像我一样需要macOS的等价物,下面是:

lsof-i tcp:8080

获取进程的PID后,可以使用以下命令终止该进程:

终止-9<PID>

如果需要GUI,请使用TCPView。这是微软收购的旧Sysinternals应用程序。

如果您想使用GUI工具来实现这一点,可以使用Sysinternals的TCPView。

获取PID和图像名称

仅使用一个命令:

for /f "tokens=5" %a in ('netstat -aon ^| findstr 9000') do tasklist /FI "PID eq %a"

其中9000应替换为您的端口号。

输出将包含如下内容:

Image Name                     PID Session Name        Session#    Mem Usage
========================= ======== ================ =========== ============
java.exe                      5312 Services                   0    130,768 K

说明:

它遍历以下命令输出的每一行:netstat-aon | findstr 9000从每一行中,提取PID(%a-名称在此不重要)(PID是该行中的第5个元素)并传递给以下命令任务列表/FI“PID eq 5312”


如果要跳过标头和命令提示符的返回,可以使用:

echo off & (for /f "tokens=5" %a in ('netstat -aon ^| findstr 9000') do tasklist /NH /FI "PID eq %a") & echo on

输出:

java.exe                      5312 Services                   0    130,768 K

这是一个帮助我的单行解决方案。只需将3000替换为端口:

$P = Get-Process -Id (Get-NetTCPConnection -LocalPort 3000).OwningProcess; Stop-Process $P.Id

编辑:将kill更改为Stop Process以获得更多类似PowerShell的语言