如何在Windows上找出正在侦听端口的进程?
Get-Process -Id (Get-NetTCPConnection -LocalPort portNumber).OwningProcess
C:\> netstat -a -b
(添加-n以阻止它尝试解析主机名,这将使其更快。)
注意丹麦人对TCPView的建议。它看起来非常有用!
-a显示所有连接和侦听端口。
-b显示创建每个连接或侦听端口所涉及的可执行文件。在某些情况下,众所周知的可执行文件承载多个独立组件,在这些情况下,将显示创建连接或侦听端口所涉及的组件序列。在这种情况下,可执行文件名在底部的[]中,顶部是它调用的组件,依此类推,直到达到TCP / IP。请注意,此选项可能非常耗时,并且除非您具有足够的权限,否则将失败。
-n以数字形式显示地址和端口号。
-o显示与每个连接关联的拥有进程ID。
要获取与每个连接关联的所有拥有进程ID的列表:
java.exe 5312 Services 0 130,768 K
如果要杀死任何进程都有id并使用此命令,那么该端口将变为空闲
netstat -ao |find /i "listening"
从windows中的pid获取端口号非常简单。
以下是步骤:
1)转到运行 - >键入cmd - >按回车键。
2)写下面的命令......
Taskkill /F /IM pidof a process
(注意:不要包括方括号。)
3)按下输入...
4)然后cmd将为您提供在该端口上运行的服务的详细信息以及pid。
5)打开任务管理器并点击服务选项卡,将pid与cmd的pid匹配,就是这样。
只需打开一个命令shell并输入:(说你的端口是123456)
netstat -aon | findstr [port number]
你会看到你需要的一切
标题是:
netstat -a -n -o | find "123456"
这就像 Proto Local Address Foreign Address State PID
TCP 0.0.0.0:37 0.0.0.0:0 LISTENING 1111
提到的那样
如果您想使用GUI工具来执行此操作,那就是here。
使用Windows 10或Windows Server 2016上的PowerShell 5,运行SysInternals TCPView cmdlet。我想它应该适用于较旧的Windows版本。
由于某种原因,Get-NetTCPConnection
的默认输出不包括进程ID,这有点令人困惑。但是,您始终可以通过格式化输出来获取它。您要找的物业是Get-NetTCPConnection
。
OwningProcess
PS C:\> Get-NetTCPConnection -LocalPort 443 | Format-List
LocalAddress : ::
LocalPort : 443
RemoteAddress : ::
RemotePort : 0
State : Listen
AppliedSetting :
OwningProcess : 4572
CreationTime : 02.11.2016 21:55:43
OffloadState : InHost
PS C:\> Get-NetTCPConnection -LocalPort 443 | Format-Table -Property LocalAddress, LocalPort, State, OwningProcess
LocalAddress LocalPort State OwningProcess
------------ --------- ----- -------------
:: 443 Listen 4572
0.0.0.0 443 Listen 4572
要找出哪个特定进程(PID)正在使用哪个端口:
PS C:\> Get-Process -Id (Get-NetTCPConnection -LocalPort 443).OwningProcess
Handles NPM(K) PM(K) WS(K) CPU(s) Id SI ProcessName
------- ------ ----- ----- ------ -- -- -----------
143 15 3448 11024 4572 0 VisualSVNServer
其中1234是您的过程的PID。 [转到任务管理器 - >服务/进程选项卡以查找应用程序的PID]
netstat -anon | findstr 1234
和netstat -ao
告诉你应用程序,但如果你不是管理员,你会得到“请求的操作需要提升”。
这不是理想的,但如果您使用sysinternals Process Explorer,您可以转到特定进程的属性并查看TCP选项卡,看看他们是否正在使用您感兴趣的端口。有点针和干草堆的东西,但也许它会帮助某人......
输入命令:netstat -ab
例如,如果我想找到端口80:netstat -aon | findstr :DESIRED_PORT_NUMBER
这个答案最初发布在netstat -aon | findstr :80
。
用netstat
this thread工具有助于搜索和过滤
有一个Windows的原生GUI:
或运行qazxsw poi,或从任务管理器性能选项卡
请遵循以下工具: - 来自cmd: - 具有管理员权限的TCPView。
C:\> netstat -anob
- Process Explorer
http://technet.microsoft.com/en-us/sysinternals/bb896653 - 流程转储
http://technet.microsoft.com/en-us/sysinternals/bb896645 - Port Monitor
全部来自sysinternals.com
如果您只想知道每个流程下的流程运行和线程,我建议您了解http://technet.microsoft.com/en-us/sysinternals/bb896644。精彩的cmd线工具,为您提供比您所知更多的东西。
示例: -
wmic
上面的命令将每5秒简要显示所有进程列表。要了解更多信息,您可以使用c:\> wmic process list brief /every:5
windows命令,例如,
/?
等等等等。 :)
netstat -a -o显示在特定端口上运行的进程的PID。
请记住进程ID并转到任务管理器和服务或详细信息选项卡,然后结束具有相同PID的进程。
因此,您可以终止在Windows中的特定端口上运行的进程。
对于那些使用Powershell的人,试试c:\>wmic /?
c:\>wmic process /?
c:\>wmic prcess list /?
:
Get-NetworkStatistics
使用Powershell ...... ...这将是你的朋友(用你的端口号替换8080):
> Get-NetworkStatistics | where Localport -eq 8000
ComputerName : DESKTOP-JL59SC6
Protocol : TCP
LocalAddress : 0.0.0.0
LocalPort : 8000
RemoteAddress : 0.0.0.0
RemotePort : 0
State : LISTENING
ProcessName : node
PID : 11552
样本输出
netstat -abno | Select-String -Context 0,1 -Pattern 8080
所以在这个例子中,tnslsnr.exe(OracleXE数据库)正在侦听端口8080。
快速解释
> TCP 0.0.0.0:8080 0.0.0.0:0 LISTENING 2920
[tnslsnr.exe]
> TCP [::]:8080 [::]:0 LISTENING 2920
[tnslsnr.exe]
用于过滤相关线路的Select-String
的冗长输出。
netstat
针对正则表达式测试每一行。
-Pattern
将为每个模式匹配输出0个前导线和1个尾随线。
以编程方式,您需要来自-Context 0,1
的东西,例如iphlpapi.h()。像GetTcpTable2这样的结构包含所有者PID。
帮助我的单线解决方案是这个,只需用你的端口替换3000
$P = Get-Process -Id (Get-NetTCPConnection -LocalPort 3000).OwningProcess; kill $P.Id
。command prompt - start » run » cmd or start » All Programs » Accessories » Command Prompt
将[port_number]替换为您要检查的实际端口号,然后按Enter键。
netstat -aon | findstr '[port_number]'
将[PID]替换为上述步骤中的数字,然后按Enter键。
对于Windows,如果要查找侦听或连接到端口1234的内容,请在cmd提示符处执行以下命令:
tasklist | findstr '[PID]'
使用下面的批处理脚本,它将进程名称作为参数,并为进程提供netstat输出。
netstat -na | find "1234"
如果你想要一个GUI,请使用resmon.exe
。这是微软收购的旧版Sysinternals应用程序。
大多数答案中提到的-b开关要求您拥有计算机的管理权限。您并不需要提升权限来获取进程名称!
找到在端口号中运行的进程的pid(例如,8080)
netstat -aon | find /i "listening"
通过pid查找进程名称
netstat -ano | findStr "8080"
tasklist /fi "pid eq 2216"
netstat -aon |find /i "listening" |find "port"
-a显示所有连接和侦听端口。
-b显示创建每个连接或侦听端口所涉及的可执行文件。在某些情况下,众所周知的可执行文件承载多个独立组件,在这些情况下,将显示创建连接或侦听端口所涉及的组件序列。在这种情况下,可执行文件名在底部的[]中,顶部是它调用的组件,依此类推,直到达到TCP / IP。请注意,此选项可能非常耗时,并且除非您具有足够的权限,否则将失败。
-n以数字形式显示地址和端口号。
-o显示与每个连接关联的拥有进程ID。注意:在任务管理器下查找进程
仅使用一个命令:
netstat -abno
其中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
th元素)并传递给以下命令
5
如果要跳过标题并返回命令提示符,可以使用:
tasklist /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
首先,我们找到我们需要消除的特定任务的进程ID,以便获得端口空闲
类型 netstat -n -a -o
在Windows命令行提示符(cmd)中执行此命令后,选择pid,我认为最后一列假设这是3312
现在输入
taskkill / F / PID 3312
您现在可以通过键入netstat命令进行交叉检查。
注意:有时Windows不允许您直接在CMD上运行此命令,因此首先需要从start->命令提示符处执行此步骤(右键单击命令提示符,然后以管理员身份运行)