如何在Windows中移除当前正在使用本地端口的进程?

1312
如何移除已经分配给某个端口的当前进程/应用程序?
例如:localhost:8080

161
npx kill-port 8080 - Rishabh Agarwal
7
显然,对于Windows 10来说,npx kill-port 要么根本不起作用,要么无法关闭具有提升权限的进程。 - Pavindu
1
@Pavindu 刚刚测试了一下,它可以在 Windows Server 2016 上无障碍地运行,即使任务正在使用提升的权限运行。 - Munchkin
我为自己找到了解决方法:lsof -i :3000 | awk '/[1-9]/ {print $2}' | xargs kill -9。可能还有更简单的方法来实现。 - Nikola-Milovic
28个回答

2692

步骤 1:

打开 cmd.exe (注意: 你可能需要以管理员身份运行它,但这并不总是必要),然后运行下面的命令:

netstat -ano | findstr :<端口号>

(将 <端口号> 替换为你想要的端口号,但保留冒号)

红圈标出的区域显示了 PID(进程标识符)。找到正在使用所需端口的进程的 PID。

步骤 2:

接下来,运行以下命令:

taskkill /PID <PID> /F

(这次没有冒号)

最后,可以通过重新运行“步骤 1”中的命令来检查操作是否成功。如果成功,则不应再看到该端口号的任何搜索结果。


76
当运行任务管理器时,我必须输入转义字符:taskkill //PID 12552 //F - Robert
1
接受的答案对于设置为在失败时重新启动的服务无效(这不是Linux)。 - nurettin
3
2020年4月3日,我在Windows10操作系统上使用Python 3.6.6和Git Bash。确认双斜杠也适用于我的情况。我需要终止一个未能正常关闭的localhost:5000上的Flask应用程序进程,例如:taskkill //F //PID 16660 - VISQL
1
什么是ano标志? - Namit Piriya
1
我在PowerShell中运行它,而且需要在提升的shell中运行taskkill - mbomb007
显示剩余10条评论

529

我知道这是一个很老的问题,但发现有一个非常容易记忆和快速的命令来杀掉正在使用端口的应用程序。

要求:npm@5.2.0^版本

npx kill-port 8080

你也可以在这里阅读有关 kill-port 的更多信息:https://www.npmjs.com/package/kill-port


18
我简直不敢相信我之前不知道这个,非常有用,谢谢! - Michael Elliott
7
我不敢相信我以前从没往下滚来看过这个... 我经常在忘记bash命令时来到这个SO页面... 这样记忆起来简单得多。 - Daniel
1
这应该是接受的答案! - Waleed Ahmad

215

有两种方法可以终止进程

选项01 - 最简单最容易的方式

要求:npm@5.2.0^版本

以管理员身份打开命令提示符,并使用端口(这里端口为8080)执行以下命令。

npx kill-port 8080

选项 02 - 最常用

  • 步骤 01

    以管理员身份打开 Windows 命令提示符
  • 步骤 02

    使用以下命令找到要终止的端口的 PID:这里的端口是 8080
netstat -ano|findstr "PID :8080"

TCP 0.0.0.0:8080 0.0.0.0:0 LISTENING 18264

  • 步骤03

    使用以下命令终止上面收到的PID (在我的情况下PID为18264)
taskkill /PID 18264 /f

1
选项1是世界上最好的答案。我想知道为什么这不是第一选择。 - Nechar Joshi

190

第一步(与KavinduWije撰写的已接受answer相同):

netstat -ano | findstr :yourPortNumber

在第二步进行更改:

tskill typeyourPIDhere 

注意: taskkill 在一些 Git Bash 终端中无法使用。


6
这是适用于我的解决方案。我正在使用GIT Bash。 - dxhans5

190

使用Windows 10/11的默认工具:

✔ 第一步:

以管理员身份打开Windows PowerShell

✔ 第二步:

查找需要终止的端口的进程ID(例如3000)

netstat -aon | findstr 3000

TCP 0.0.0.0:3000 监听 1234 ✔ 第三步:
终止僵尸进程:
taskkill /f /pid 1234

其中"1234"是您的进程 ID(也称为 PID)

*如果您使用 Windows 子系统来运行 Linux(Ubuntu WSL),以下是一些额外的提示:

✔ 第一步:

sudo lsof -t -i:3000

✔ 第二步:
sudo kill -9 1234

2
如何自动化这个过程并将这两个命令合并到一个批处理文件中,如果没有可能查看cmd输出,然后再手动编写新的命令? - Serob_b
6
set /p port="输入端口号:" -> 输入端口号
FOR /F "tokens=5" %%T IN ('netstat -aon ^| findstr %port%') DO ( SET /A ProcessId=%%T) &GOTO SkipLine -> 将 PID 提取到变量中
taskkill /f /pid %ProcessId% -> 结束进程
cmd /k -> 保持窗口打开
- Vikrant
@Vikrant 有没有办法隐藏所有命令,只显示“输入端口:”和“成功:PID 35264的进程已终止。”? - CrazyVideoGamer
2
@CrazyVideoGamez @echo off - VB_Dojnaz

116

如果您正在使用GitBash

步骤一:

netstat -ano | findstr :8080

步骤二:

taskkill /PID typeyourPIDhere /F 

(/F强制终止进程)


3
请尝试使用单斜杠。 "双斜杠"是转义字符,位于不需要一些shell的/之前。 - Robert

90

最简单的解决方案 - 我能想到的唯一解决方案:

在Windows Powershell中:

假设我们想要停止端口8080上的进程

  1. 获取该进程:
netstat -ano | findstr :8080
  1. 停止该进程
stop-process 82932

1
这个帮了我!我在Win10上~ - Code Cooker
需要从 PowerShell 中运行(而不是 Git Bash)。 - s2t2

61

如果您已经知道端口号,发送一个软件终止信号到该进程(SIGTERM)可能就足够了:

kill $(lsof -t -i :PORT_NUMBER)

1
如果您知道该端口正在使用IPv4,则可以执行lsof -nt -i4TCP:9001 - vhs
3
我必须执行 kill -9 $(lsof -t -i :PORT_NUMBER)。 - gunes
2
非常感谢,其他答案中过于冗长了。我只需要这个脚本。 - Shardj
2
术语“lsof”不被识别为cmdlet、函数或脚本文件的名称。 - GorvGoyl

44

命令行使用:

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

用于bat文件中:

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

1
如果您想在.bat文件中执行此操作,则需要将% a替换为%%a。 - Mahesh Narwade
1
这个答案是唯一一个对我有效的单行命令,所以它真的很好。我有一个在两个端口上运行的任务,导致出现错误“ERROR: The process "6552" not found.”,因为该任务已经退出。 - tscpp
需要往下滚动很远才能得到像这样的“编程式”答案。顺便问一下,tokens=5是什么意思? - Timo
一行代码的解决方案,可用于 package.json 脚本,无需手动步骤。 - Sh eldeeb

42

简单的CMD适用于我。易于记忆。

找到您想要终止的端口号并运行以下命令:

npx kill-port 8080
完成端口后停止,并收到此消息。
npx: installed 3 in 13.796s
Process on port 8080 killed

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接