Windows:杀死在特定端口上运行的进程的最快方法


11

我要多次处理这个过程。我必须杀死Windows机器上的进程,我只知道其端口。通常,步骤如下:通过查看端口(例如端口8084)查找PID,列出在端口上运行的进程

netstat -a -o -n

然后使用以下命令终止该端口上的进程

taskkill /F /PID <pid>

我可以在Windows OS上使用任何东西像管道之类的东西来在一行中运行此命令吗?


1
很抱歉,我现在无法编写完整的答案,请看一下findstr(Windows grep)。例如:netstat -a -o -n | findstr "LISTENING" | findstr ":135"。也许这
会使

@OliverSalzburg需要注意第二点findstr:可能与本地或远程端口号匹配。(接受Q并没有指定哪个。)
理查德(Richard

Answers:


10

我可以在Windows操作系统上使用任何东西像管道之类的东西来在一行中运行此命令吗?

无论cmd.exe和PowerShell支持管道从一个命令到另一个。在PowerShell中,类似这样的命令(应该在命令行的一行上,或者使用`来在脚本中转义换行符):

netstat -ano
 | select -skip 4 
 | % {$a = $_ -split ' {3,}'; New-Object 'PSObject' -Property @{Original=$_;Fields=$a}} 
 | ? {$_.Fields[1] -match '15120$'}
 | % {taskkill /F /PID $_.Fields[4] }

哪里:

  • Select -skip 4跳过前四个标题行。(SelectSelect-Object用于执行类似对象项目的SQL SELECT的缩写。
  • %的缩写,Foreach-Object$_在管道中的每个对象()上执行脚本块,并将脚本块的结果输出到管道。在这里,它首先将输入分解成一个字段数组,然后创建一个具有两个属性Original的新鲜对象,该属性来自字符串netstatFields刚创建的数组。
  • ?缩写,Where-Object表示基于脚本块结果的过滤器。这里在第二个字段的末尾匹配一个正则表达式(所有PowerShell容器都基于零)。

(除了最后一个元素,所有测试:我不想开始杀死进程:-))。

实际上,我会简化这一点。从第一个开始仅返回0或PID foreach(这将被设计为忽略标题),并在调用之前过滤不为零的值taskkill。这将更快地键入,但在不了解PowerShell的情况下很难遵循。


由于某种原因,我的Powershell无法识别选择!正在运行Windows 7“选择”,并选择执行该操作。与“选择对象”相同
Armand 2012年

这对我有用,但是找到了两次,我相信是由于列出了IPv4和IPv6版本netstat。这导致的错误(可能无害)ERROR: The process "12345" not found.
Scott Weldon

我认为这里很重要taskkill /F /PID [PID]。这样,只要有人能够获取PID,就可以手动终止任务。
Sawtaytoes

1

打开命令提示符并执行:

for /f "tokens=5" %a in ('netstat -aon ^| find "8080"') do taskkill /f /pid %a

如果要在.bat中执行此操作,请将%a替换为%% a

如果您只想杀死正在该端口上监听的端口,则在另一端口的末尾附加(^ |查找“ LISTENING”)。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.