如何在 Windows 中终止当前使用 localhost 上的端口的进程?
Posted
技术标签:
【中文标题】如何在 Windows 中终止当前使用 localhost 上的端口的进程?【英文标题】:How do I kill the process currently using a port on localhost in Windows? 【发布时间】:2017-01-30 15:43:30 【问题描述】:如何删除已分配给端口的当前进程/应用程序?
例如:localhost:8080
【问题讨论】:
npx kill-port 8080 npx kill-port 8080 也为我工作 显然,对于 Windows 10,npx kill-port 要么根本不工作,要么无法终止具有提升权限的进程。 npx kill-port 在 mac 上为我使用 vscode 【参考方案1】:第 1 步:
打开 cmd.exe(注意:您可能需要以管理员身份运行它,但这并不总是必要的),然后运行以下命令:
netstat -ano | findstr :<PORT>
(将<PORT>
替换为你想要的端口号,但保留冒号)
红色圈出的区域显示了 PID(进程标识符)。找到正在使用所需端口的进程的 PID。
第 2 步:
接下来,运行以下命令:
taskkill /PID <PID> /F
(这次没有冒号)
最后,您可以通过重新运行“步骤 1”中的命令来检查操作是否成功。如果成功,您将不会再看到该端口号的任何搜索结果。
【讨论】:
我在运行 taskkill 时必须输入转义字符:taskkill //PID 12552 //F
接受的答案不适用于设置为在失败时重新启动的服务(这不是 linux)
我在端口 80 上获得了 processId 0。如果我试图杀死它,我会得到“错误:无法终止 PID 0 的进程。原因:这是关键系统进程。Taskkill 无法结束此进程。”
2020-04-03,Windows10,Python 3.6.6,使用 Git Bash:确认使用双斜杠也对我有用。我需要在 localhost:5000
上杀死一个没有终止的 Flask 应用程序进程。例如taskkill //F //PID 16660
.
我认为你的意思是 PID_NUMBER 而不是 taskkill /PID PORT_NUMBER /F
中的 PORT_NUMBER 【参考方案2】:
如果您使用的是 GitBash
第一步:
netstat -ano | findstr :8080
第二步:
taskkill /PID typeyourPIDhere /F
(/F
强制终止进程)
【讨论】:
@kylexy1357 尝试使用单斜杠。 “双斜杠”是 / 之前的转义字符,某些 shell 不需要此字符【参考方案3】:第 1 步(answer 已接受,KavinduWije 编写):
netstat -ano | findstr :yourPortNumber
将第 2 步更改为:
tskill typeyourPIDhere
注意:taskkill
在某些 git bash 终端中不起作用
【讨论】:
这是对我有用的解决方案。我正在使用 GIT Bash。【参考方案4】:在 Windows PowerShell 版本 1 或更高版本中停止端口 3000 上的进程:
停止进程 (,(netstat -ano | findstr :3000).split() | foreach $[$.length-1]) -Force
正如@morganpdx 所建议的,这里有一个更 PowerShell-ish、更好的版本:
Stop-Process -Id (Get-NetTCPConnection -LocalPort 3000).OwningProcess -Force
【讨论】:
'Stop-Process' is not recognized as an internal or external command,
我发现这行得通:Stop-Process -Id (Get-NetTCPConnection -LocalPort 3000).OwningProcess -Force
【参考方案5】:
用于命令行:
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
【讨论】:
如果你想在 .bat 中进行,请将 %a 替换为 %%a 这个答案是唯一对我有用的一行命令,所以它真的很好。我有一个任务在两个端口上运行,导致错误“错误:找不到进程“6552”。”因为任务已经退出了。 需要向下滚动很远才能获得这样的 "programmatic" 答案。顺便说一句,tokens=5
是什么?【参考方案6】:
如果您想使用 Python 执行此操作:请查看 Is it possible in python to kill process that is listening on specific port, for example 8080?
Smunk 的回答效果很好。我在这里重复他的代码:
from psutil import process_iter
from signal import SIGTERM # or SIGKILL
for proc in process_iter():
for conns in proc.connections(kind='inet'):
if conns.laddr.port == 8080:
proc.send_signal(SIGTERM) # or SIGKILL
continue
【讨论】:
这也适用于在 Google Cloud 中使用特定端口号的套接字!非常感谢【参考方案7】:我们可以通过简单的重启 IIS 来避免这种情况,使用以下命令:
IISRESET
【讨论】:
【参考方案8】:对于Windows用户,您可以使用CurrPorts工具轻松杀死正在使用的端口:
【讨论】:
【参考方案9】:你可以通过运行一个bat文件来做到:
@ECHO OFF
FOR /F "tokens=5" %%T IN ('netstat -a -n -o ^| findstr "9797" ') DO (
SET /A ProcessId=%%T) &GOTO SkipLine
:SkipLine
echo ProcessId to kill = %ProcessId%
taskkill /f /pid %ProcessId%
PAUSE
【讨论】:
【参考方案10】:我在 Windows 上运行 zookeeper,但无法使用 zookeeper-stop.sh 停止在 2181 端口运行的ZooKeeper,因此尝试了这种双斜杠“//”方法来执行任务。成功了
1. netstat -ano | findstr :2181
TCP 0.0.0.0:2181 0.0.0.0:0 LISTENING 8876
TCP [::]:2181 [::]:0 LISTENING 8876
2.taskkill //PID 8876 //F
SUCCESS: The process with PID 8876 has been terminated.
【讨论】:
【参考方案11】:如果您已经知道端口号,则向进程发送软件终止信号(SIGTERM)可能就足够了:
kill $(lsof -t -i :PORT_NUMBER)
【讨论】:
如果您知道该端口正在使用 IPv4,您也可以使用lsof -nt -i4TCP:9001
。
我不得不杀死 -9 $(lsof -t -i :PORT_NUMBER)
谢谢,其他答案太过分了。从字面上看,只需要这个脚本
术语“lsof”未被识别为 cmdlet、函数、脚本文件的名称【参考方案12】:
使用 Windows 10 默认工具:
第一步:以管理员身份打开 Windows PowerShell
第二步:查找 8080 端口的 PID (ProcessID):
netstat -aon | findstr 8080
第三步:TCP 0.0.0.0:8080 0.0.0.0:0 LISTEN 77777
杀死僵尸进程:
taskkill /f /pid 77777
其中“77777”是您的 PID
【讨论】:
如果无法查看 cmd 输出然后手动编写新命令,如何自动化该过程并将这两个命令组合到一个 bat 文件中? @Serob_bset /p port="Enter port: "
-> 输入端口FOR /F "tokens=5" %%T IN ('netstat -aon ^| findstr %port% ') DO ( SET /A ProcessId=%%T) &GOTO SkipLine
:SkipLine
-> 将PID提取到变量taskkill /f /pid %ProcessId%
-> 终止任务cmd /k
-> 保持窗口打开
@Vikrant 有没有办法隐藏所有命令,只显示“输入端口:”和“成功:PID 35264 的进程已终止。” ?
@CrazyVideoGamez @echo off
【参考方案13】:
使用 GitBash 的单行解决方案:
tskill `netstat -ano | grep LISTENING | findstr :8080 | sed -r 's/(\s+[^\s]+)4(.*)/\1/'`
将 8080 替换为您的服务器正在侦听的端口。
如果您需要经常使用,请尝试在您的~/.bashrc
中添加该功能:
function killport()
tskill `netstat -ano | findstr LISTENING | findstr :$1 | sed -r 's/^(\s+[^\s]+)4(\d*)$/\1/'`
然后简单地运行
killport 8080
【讨论】:
我收到了错误:bash: taskill: command not found
@ChauGiang 这似乎是一个错字。使用tskill
而不是taskill
。【参考方案14】:
如果您使用的是Windows Terminal,那么杀戮过程可能不会那么乏味。
我一直在使用 Windows 终端,kill PID
可以很好地杀死端口上的进程,因为新的 Windows 终端支持某些 bash 命令。例如:kill 13300
所以,完整的过程会是这样的-
打开 Windows 终端 键入以下命令以显示在您要终止进程的端口上运行的进程。netstat -ano | findstr :PORT
键入以下以终止进程。
kill PID
例如:
PS C:\Users\username> netstat -ano | findstr :4445
TCP 0.0.0.0:4445 0.0.0.0:0 LISTENING 7368
TCP [::]:4445 [::]:0 LISTENING 7368
PS C:\Users\username> kill 7368
PS C:\Users\username> netstat -ano | findstr :4445
PS C:\Users\username>
查看当我键入第一个命令以列出端口上的进程时它返回为空。这意味着现在所有进程都被杀死了。
更新:kill
是 Stop-Process 的别名。谢谢@FSCKur 让我们知道。
【讨论】:
我知道这行得通,因为我测试了它,我正在尝试查找有关它的文档,你有吗? @DanStarns,到目前为止我只发现了这个! docs.microsoft.com/en-us/windows/terminal 感谢您的宝贵时间,这不是我要找的页面,一个包含终端中提供的所有功能的页面,例如kill
。如果我找到我会在这里发布。
到目前为止,我还没有找到太多关于此的信息。如果您发现任何内容,请发布。
我不得不投反对票,因为您对kill
感到困惑。这与您选择的终端无关。任何傻瓜都知道,在 PS 中,您使用 Get-Command 来了解您正在运行的命令,它向您表明,在 Windows 上,kill 是 Stop-Process 的别名。在 Linux 上,它不是别名,而是本机命令。【参考方案15】:
我知道这确实是个老问题,但发现很容易记住,快速命令可以杀死正在使用端口的应用程序。
要求:npm@5.2.0^ 版本
npx kill-port 8080
您还可以在此处阅读有关 kill-port 的更多信息:https://www.npmjs.com/package/kill-port
【讨论】:
我不敢相信我不知道这一点,非常有用,谢谢! 耶,真棒:) 非常爱你 rn 爱它,感谢您在我的知识中加分 非常感谢,拯救我的一天!【参考方案16】:有两种方法可以杀死进程
选项 01 - 最简单最容易 要求:npm@5.2.0^ 版本 以管理员身份打开命令提示符并使用端口(此处端口为 8080)输入以下命令
npx kill-port 8080
选项 02 - 最常用
步骤 01 以管理员身份打开 Windows 命令提示符 步骤 02 使用以下命令查找要杀死的端口的 PID:Here port is 8080netstat -ano|findstr "PID :8080"
步骤 03 使用以下命令终止您在上面收到的 PID(在我的情况下 PID 是 18264)TCP 0.0.0.0:8080 0.0.0.0:0 监听 18264
taskkill /PID 18264 /f
【讨论】:
杀死正在运行的端口就像一个魅力。谢谢【参考方案17】:这是在 WSL2 中执行此操作的脚本
PIDS=$(cmd.exe /c netstat -ano | cmd.exe /c findstr :$1 | awk 'print $5')
for pid in $PIDS
do
cmd.exe /c taskkill /PID $pid /F
done
【讨论】:
【参考方案18】:第一步
netstat -vanp tcp | grep 8888
例子
tcp4 0 0 127.0.0.1.8888 *.* LISTEN 131072 131072 76061 0
tcp46 0 0 *.8888 *.* LISTEN 131072 131072 50523 0
第二步:找到你的 PID 并杀死它们
就我而言
sudo kill -9 76061 50523
【讨论】:
即使这是一个正确的答案。这个问题是针对windows环境问的,你的答案在Linux系统上无效。【参考方案19】:如果您可以在 Windows 上使用 PowerShell,您只需要:
Get-Process -Id (Get-NetTCPConnection -LocalPort "8080").OwningProcess | Stop-Process
【讨论】:
【参考方案20】:netstat -ano | findstr :PORT
kill PI
【讨论】:
【参考方案21】:打开命令提示符并发出以下命令
netstat -ano|findstr "PID :8888"
输出会显示占用端口的进程id
发出以下命令来杀死 PID
taskkill /pid 8912 /f
您将收到如下输出
SUCCESS: The process with PID 8860 has been terminated.
【讨论】:
【参考方案22】:简单的 CMD 对我有用。好记
找到你想杀死的端口号并运行下面的cmd
npx kill-port 8080
完成后端口停止并收到此消息
npx: installed 3 in 13.796s
Process on port 8080 killed
【讨论】:
【参考方案23】:让我们自动化吧!
如果你像我一样经常遇到这个问题,请制作一个 .bat 文件并运行它以结束进程。
创建一个bat文件“killport.bat”
set /P port="Enter port : "
echo showing process running with port %port%
netstat -ano|findstr "PID :%port%"
set /P pid="Enter PID to kill : "
taskkill /pid %pid% /f
set /P exit="Press any key to exit..."
双击运行这个文件
-
输入端口号(然后它会列出带有PID的进程)
输入 PID 杀死
完成
(可选)
设置为路径环境,以便您可以从任何地方访问此文件。
您很可能会知道如何向 env 添加新路径。但如果你不这样做,情况如下
第 1 步,共 4 步
在开始菜单上搜索 ENV
第 2 步,共 4 步
选择环境变量
第 3 步,共 4 步
选择“路径”并点击编辑按钮
第 4 步,共 4 步
单击“新建”添加存储 .bat 文件的路径。由于我将其保存在“../Documents/bats”文件夹中,因此我正在添加此路径。您的路径将取决于您保存此文件的位置。
打开 CMD 并测试。请记住您的文件名将运行此文件的单词。由于我将 .bat 文件保存为 'killport.bat' => 'killport' 是运行它的单词。
如果喜欢! 否则在这里分享你是如何做到的
【讨论】:
【参考方案24】:以管理员身份运行 cmd。然后在里面输入这段代码。
netstat -ano | findstr :<8080>
然后您可以看到 PID 在您的端口上运行。然后复制该PID号。 (PID 是一个唯一编号,有助于识别硬件产品或已注册的软件产品。)然后在下面的代码行中键入并按 Enter。
taskkill /PID <Enter the copied PID Number> /F
【讨论】:
【参考方案25】:我为此编写了一个小节点 js 脚本。像这样运行它:
node killPort.js 8080
或您需要杀死的任何端口。将以下内容保存到killPort.js
文件中:
const exec = require('child_process');
const fs = require(`fs`);
const port = process.argv.length > 2 ? process.argv[2] : ``;
if (!port || isNaN(port)) console.log(`port is required as an argument and has to be a number`);
else
exec(`netstat -ano | findstr :$port`, (err, stdout, stderr) =>
if (!stdout) console.log(`nobody listens on port $port`);
else
const res = stdout.split(`\n`).map(s => s.trim());
const pid = res.map(s => s.split(` `).pop()).filter(s => s).pop();
console.log(`Listener of $port is found, its pid is $pid, killing it...`);
exec(`taskkill /PID $pid /F`, (err, stdout, stderr) =>
if (!stdout) console.log(`we tried to kill it, but not sure about the result, please run me again`);
else console.log(stdout);
)
);
【讨论】:
【参考方案26】:最简单的解决方案——我记得的唯一一个:
在 Windows Powershell 中
假设我们要停止端口 8080
上的进程-
获取流程:
netstat -ano | findstr :8080
-
停止进程
stop-process 82932
【讨论】:
这个帮助了我!我在Win10上~【参考方案27】:我遵循了这个答案: https://***.com/a/37626811/7286223
netstat -ano
将列出所有正在侦听的协议、端口和进程。
改用这个:
netstat -tulpen
在这里,我们找到了端口及其 pid。然后我们可以通过键入来终止该进程
kill -9 pid
这里-9表示软删除。
【讨论】:
【参考方案28】:我正在使用 GitBash,运行时出现如下错误
taskkill //PID XXXX
错误:无法终止 PID 7420 的进程。原因:这个 进程只能强制终止(使用 /F 选项)。
所以像下面这样使用 //F 并且工作正常
taskkill //F //PID XXXX
【讨论】:
以上是关于如何在 Windows 中终止当前使用 localhost 上的端口的进程?的主要内容,如果未能解决你的问题,请参考以下文章
Windows 上的 Python 2.6:如何使用“shell=True”参数终止 subprocess.Popen?