Answers:
Get-Process -Id (Get-NetTCPConnection -LocalPort portNumber).OwningProcess
C:\> netstat -a -b
(添加-n可以阻止它尝试解析主机名,这将使其速度大大提高。)
注意Dane对TCPView的建议。看起来非常有用!
-a 显示所有连接和侦听端口。
-b 显示创建每个连接或侦听端口所涉及的可执行文件。在某些情况下,众所周知的可执行文件包含多个独立的组件,在这些情况下,将显示创建连接或侦听端口所涉及的组件顺序。在这种情况下,可执行文件的名称在底部的[]中,在顶部是其调用的组件,依此类推,直到达到TCP / IP。请注意,此选项可能很耗时,除非您拥有足够的权限,否则它将失败。
-n 以数字形式显示地址和端口号。
-o 显示与每个连接关联的拥有进程ID。
1234
,那么您就可以tasklist /fi "pid eq 1234"
用来找出过程的名称和其他详细信息。
Windows有一个本机GUI:
或运行 resmon.exe
,或从任务管理器的性能标签中。
如果要为此使用GUI,请使用TCPView。这是微软购买的旧Sysinternals应用程序。
对于Windows:
netstat -aon | find /i "listening"
netstat -aon | find /i "abhören"
德语。
FIND: Parameter format not correct
如果运行以下命令,则可以获得更多信息:
netstat -aon | find /i "listening" |find "port"
使用“查找”命令可以过滤结果。find /i "listening"
将仅显示“正在监听”的端口。请注意,您需要/i
忽略大小写,否则将键入find“ LISTENING”。| find "port"
将结果限制为仅包含特定端口号的结果。请注意,此操作还将过滤响应字符串中任意位置具有端口号的结果。
FIND: Parameter format not correct
。您需要在查找条件之后添加一个空格。这将使您离开netstat -aon | find /i "listening" | find "1234 "
。
{back tick}
” listening {back tick}
“” | find“ {back tick}
” port {back tick}
“ “(<-请注意转义的引号-请原谅该词,back tick
因为我不能添加实际的字符,因为它认为这是令人生厌的)
打开命令提示符窗口(以管理员身份)从“开始\搜索框”中输入“ cmd”,然后右键单击“ cmd.exe”并选择“以管理员身份运行”
输入以下文本,然后按Enter。
netstat -abno
-a 显示所有连接和侦听端口。
-b 显示创建每个连接或侦听端口所涉及的可执行文件。在某些情况下,众所周知的可执行文件包含多个独立的组件,在这些情况下,将显示创建连接或侦听端口所涉及的组件顺序。在这种情况下,可执行文件的名称在底部的[]中,在顶部是其调用的组件,依此类推,直到达到TCP / IP。请注意,此选项可能很耗时,除非您拥有足够的权限,否则它将失败。
-n 以数字形式显示地址和端口号。
-o 显示与每个连接关联的拥有进程ID。
在“本地地址”下找到您正在监听的端口
直接在该名称下查看进程名称。
注意:要在任务管理器下找到该过程
注意您正在查看的端口旁边的PID(进程标识符)。
打开Windows任务管理器。
选择进程选项卡。
查找在步骤1中执行netstat时记下的PID。
如果看不到PID列,请单击“查看/选择列”。选择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
从每一行%a
中提取PID(-名称在此并不重要)(PID是该行中的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
输出:
java.exe 5312 Services 0 130,768 K
findstr :9000
否”,甚至可以找到包含数字的应用程序(例如,当搜索“ 80”时,也会在端口80、800、8000上找到应用程序)。
首先,我们找到特定任务的进程ID,我们需要消除该进程ID以释放端口:
类型
netstat -n -a -o
在Windows命令行提示符(cmd)中执行此命令后,选择我认为最后一列的pid。假设是3312。
现在输入
taskkill /F /PID 3312
现在,您可以通过键入netstat
命令进行交叉检查。
注意:有时Windows不允许您直接在CMD上运行此命令,因此首先您需要执行以下步骤:
从开始菜单->命令提示符(右键单击命令提示符,然后以管理员身份运行)
要获取与每个连接关联的所有拥有进程ID的列表,请执行以下操作:
netstat -ao |find /i "listening"
如果要杀死任何具有ID的进程并使用此命令,则该端口将变为空闲
Taskkill /F /IM PID of a process
从Windows中的PID获取端口号非常简单。
步骤如下:
转到运行→键入cmd→按Enter。
编写以下命令...
netstat -aon | findstr [port number]
(注意:不包括方括号。)
按Enter...
然后,cmd将为您提供在该端口上运行的服务的详细信息以及PID。
打开任务管理器,然后单击服务选项卡,将PID与cmd的PID匹配,仅此而已。
只需打开命令外壳并键入(假设您的端口为123456):
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
这就是这里提到的。
findstr 123456
不带引号)或find "123456"
(带引号)。(@Josh)
要找出哪个特定进程(PID)使用哪个端口:
netstat -anon | findstr 1234
其中1234是您的进程的PID。[转到任务管理器→服务/进程选项卡以查找您的应用程序的PID。]
-n
标志设置两次。-ano
足够。
使用Windows 10或Windows Server 2016上的PowerShell 5运行 Get-NetTCPConnection
cmdlet。我猜它也应该在较旧的Windows版本上运行。
由于Get-NetTCPConnection
某种原因,默认输出不包含进程ID,这有点令人困惑。但是,您始终可以通过格式化输出来获取它。您要查找的属性是OwningProcess
。
如果要查找正在端口443上侦听的进程的ID,请运行以下命令:
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
如果要查找进程的名称,请运行以下命令:
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
如果您想使用GUI工具执行此操作,请使用Sysinternals的TCPView。
打开命令提示符-开始→ 运行 → cmd
或开始菜单→ 所有程序 → 附件 → 命令提示符。
类型
netstat -aon | findstr '[port_number]'
将替换为[port_number]
要检查并点击的实际端口号Enter。
类型
tasklist | findstr '[PID]'
将其替换为[PID]
上述步骤中的数字,然后按Enter。
netstat -ao
和 netstat -ab
告诉您该应用程序,但是如果您不是系统管理员,则会看到“请求的操作需要提升权限”。
这并不理想,但是如果您使用Sysinternals的Process Explorer,则可以转到特定进程的属性,然后查看“ TCP”选项卡以查看它们是否正在使用您感兴趣的端口。这有点麻烦东西,但也许会帮助某人...
一个对我有帮助的单线解决方案就是这个。只需将3000替换为您的端口即可:
$P = Get-Process -Id (Get-NetTCPConnection -LocalPort 3000).OwningProcess; Stop-Process $P.Id
编辑:更改kill
到Stop-Process
更多的PowerShell的语言一样
Get-Process -Id (Get-NetTCPConnection -LocalPort 3000).OwningProcess | Stop-Process
请遵循以下工具:从cmd:C:\> netstat -anob
具有管理员权限。
全部来自sysinternals.com。
如果您只想了解进程的运行情况以及每个进程下的线程,建议您学习有关内容wmic
。这是一个很棒的命令行工具,它为您提供了远远超过您所知道的。
例:
c:\> wmic process list brief /every:5
上面的命令将每5秒简要显示一个所有进程列表。要了解更多信息,您可以使用/?
Windows命令,例如,
c:\> wmic /?
c:\> wmic process /?
c:\> wmic prcess list /?
等等等等。:)
对于使用PowerShell的用户,请尝试Get-NetworkStatistics
:
> 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
以编程方式,您需要iphlpapi.h中的内容,例如GetTcpTable2()。MIB_TCP6ROW2之类的结构包含所有者PID。
使用PowerShell ... ...这将是您的朋友(将8080替换为您的端口号):
netstat -abno | Select-String -Context 0,1 -Pattern 8080
样品输出
> TCP 0.0.0.0:8080 0.0.0.0:0 LISTENING 2920
[tnslsnr.exe]
> TCP [::]:8080 [::]:0 LISTENING 2920
[tnslsnr.exe]
因此,在此示例中,tnslsnr.exe(OracleXE数据库)正在侦听端口8080。
快速说明
Select-String
用于过滤netstat
相关行的冗长输出。-Pattern
根据正则表达式测试每一行。-Context 0,1
对于每个模式匹配,将输出0条前线和1条尾线。使用下面的批处理脚本,该脚本以进程名称作为参数并提供netstat
该进程的输出。
@echo off
set procName=%1
for /f "tokens=2 delims=," %%F in ('tasklist /nh /fi "imagename eq %1" /fo csv') do call :Foo %%~F
goto End
:Foo
set z=%1
echo netstat for : "%procName%" which had pid "%1"
echo ----------------------------------------------------------------------
netstat -ano |findstr %z%
goto :eof
:End
根据信息和杀死的答案,对我来说,将它们组合成一个命令很有用。您可以从cmd运行此命令,以获取有关在给定端口上侦听进程的信息(示例8080):
for /f "tokens=3 delims=LISTENING" %i in ('netstat -ano ^| findStr "8080" ^| findStr "["') do @tasklist /nh /fi "pid eq %i"
或者,如果您想杀死它:
for /f "tokens=3 delims=LISTENING" %i in ('netstat -ano ^| findStr "8080" ^| findStr "["') do @Taskkill /F /IM %i
您也可以将这些命令放入bat文件(它们会稍有不同-替换%i
为%%i
):
portInfo.bat
for /f "tokens=3 delims=LISTENING" %%i in (
'netstat -ano ^| findStr "%1" ^| findStr "["'
) do @tasklist /nh /fi "pid eq %%i"
portKill.bat
for /f "tokens=3 delims=LISTENING" %%i in (
'netstat -ano ^| findStr "%1" ^| findStr "["'
) do @Taskkill /F /IM %%i
然后,您可以从cmd执行以下操作:
portInfo.bat 8080
要么
portKill.bat 8080
.\portInfo.bat 800
在PowerShell中,它给出了如下所示:C:\work>for /F "tokens=3 delims=LISTENING" %i in ('netstat -ano | findStr "800" | findStr "["') do (tasklist /fi "pid eq %i" ) C:\work>(tasklist /fi "pid eq 4" ) Image Name PID Session Name Session# Mem Usage ========================= ======== ================ =========== ============ System 4 Services 0 1,820 K
portInfo.bat
在powershell终端中命名的文件中,然后执行.\portInfo.bat 8080
。输出只是批处理文件的内容。很好,我正在忽略某些东西。请注意,我在Windows 10上使用PowerShell 6.2.3。我也在常规命令提示符下尝试过该操作,但结果是相同的:输出脚本内容。我敢肯定,我缺少必要的信息来完成这项工作。
/nh
:@tasklist /nh /fi "pid eq %i"
?恰好是门:Findstr ":8080"