如何终止当前使用 Windows 中本地主机端口的进程?
How do I kill the process currently using a port on localhost in Windows?
如何删除已分配给端口的当前 process/application?
例如:localhost:8080
第 1 步:
打开 cmd.exe(注意:您 可能 需要 运行 作为管理员,但这并不总是必要的),然后 运行 下面的命令:
netstat -ano | findstr :<PORT>
(将<PORT>
替换成你想要的端口号,但保留冒号)
红色圈出的区域为PID(进程标识符)。找到正在使用所需端口的进程的 PID。
第 2 步:
接下来,运行以下命令:
taskkill /PID <PID> /F
(这次没有冒号)
最后,您可以通过重新运行执行“步骤1”中的命令来检查操作是否成功。如果成功,您应该不会再看到该端口号的任何搜索结果。
如果你使用的是 GitBash
第一步:
netstat -ano | findstr :8080
第二步:
taskkill /PID typeyourPIDhere /F
(/F
强行终止进程)
第 1 步(已接受 written by KavinduWije):
netstat -ano | findstr :yourPortNumber
将步骤 2 更改为:
tskill typeyourPIDhere
注意:taskkill
在某些 git bash 终端
中不工作
在 Windows PowerShell 版本 1 或更高版本中停止端口 3000 上的进程类型:
Stop-Process (,(netstat -ano | findstr :3000).split() | foreach {$[$.length-1]}) -Force
正如@morganpdx 所建议的,这里有一个更像 PowerShell 的更好版本:
Stop-Process -Id (Get-NetTCPConnection -LocalPort 3000).OwningProcess -Force
在命令行中使用:
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
如果您想使用 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
我们可以通过使用以下命令简单地重新启动 IIS 来避免这种情况:
IISRESET
对于 Windows 用户,您可以使用 CurrPorts 工具轻松关闭正在使用的端口:
你可以通过运行一个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
我是 Windows 上的 运行 zookeeper,但无法使用 zookeeper-stop.sh 在 2181 端口停止 ZooKeeper 运行,所以尝试了这个双斜杠“//”方法到 taskkill。成功了
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.
如果您已经知道端口号,向进程发送软件终止信号 (SIGTERM) 可能就足够了:
kill $(lsof -t -i :PORT_NUMBER)
使用 Windows 10 个默认工具:
- 第一步:
以管理员身份打开 Windows PowerShell
- 第二步:
查找端口 8080 的 PID(进程 ID):
netstat -aon | findstr 8080
TCP 0.0.0.0:8080 0.0.0.0:0 LISTEN 77777
- 第三步:
杀死僵尸进程:
taskkill /f /pid 77777
其中“77777”是您的 PID
使用GitBash的一行解决方案:
tskill `netstat -ano | grep LISTENING | findstr :8080 | sed -r 's/(\s+[^\s]+){4}(.*)//'`
将 8080 替换为您的服务器正在侦听的端口。
如果您需要经常使用它,请尝试在您的 ~/.bashrc
中添加以下功能:
function killport() {
tskill `netstat -ano | findstr LISTENING | findstr : | sed -r 's/^(\s+[^\s]+){4}(\d*)$//'`
}
并且只是 运行
killport 8080
如果您使用的是 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 让我们知道。
我知道这是一个很老的问题,但发现很容易记住,快速命令可以杀死正在使用端口的应用程序。
要求:npm@5.2.0^版本
npx kill-port 8080
您还可以在此处阅读有关 kill-port 的更多信息:https://www.npmjs.com/package/kill-port
有两种方法可以终止进程
选项 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
这是在 WSL2 中执行此操作的脚本
PIDS=$(cmd.exe /c netstat -ano | cmd.exe /c findstr : | awk '{print }')
for pid in $PIDS
do
cmd.exe /c taskkill /PID $pid /F
done
第一步
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 上使用 PowerShell,您只需要:
Get-Process -Id (Get-NetTCPConnection -LocalPort "8080").OwningProcess | Stop-Process
netstat -ano | findstr :PORT
kill PI
打开命令提示符并发出以下命令
netstat -ano|findstr "PID :8888"
输出会显示占用端口的进程id
发出以下命令以终止 PID
taskkill /pid 8912 /f
您将收到如下输出
SUCCESS: The process with PID 8860 has been terminated.
简单的 CMD 正在为我工作。好记
找到你想要杀死的端口号和运行下面的cmd
npx kill-port 8080
完成后端口停止并收到此消息
npx: installed 3 in 13.796s
Process on port 8080 killed
让我们自动化!
如果你像我一样经常遇到这个问题,制作一个 .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 步
Select 环境变量
第 3 步,共 4 步
Select 'path' 然后点击编辑按钮
第 4 步,共 4 步
点击'New'添加.bat文件存放路径。因为我将它保存在“../Documents/bats”文件夹中,所以我添加了这条路径。您的路径将取决于您保存此文件的位置。
打开CMD并测试。记住你的文件名将 运行 这个文件的单词。由于我将 .bat 文件保存为 'killport.bat' => 'killport' 是 运行 的单词。
如果喜欢!
否则在这里分享你是如何做到的
运行 以管理员身份运行命令。然后在里面输入这段代码。
netstat -ano | findstr :<8080>
然后您可以在您的端口上看到 PID 运行。然后复制那个 PID 号。 (PID 是帮助识别硬件产品或注册软件产品的唯一编号。)然后在代码行下方键入并按回车键。
taskkill /PID <Enter the copied PID Number> /F
我为此编写了一个微型节点 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);
})
}
});
}
最简单的解决方案——我唯一记得的解决方案:
在 Windows Powershell
假设我们要在端口 8080
上停止进程
- 获取进程:
netstat -ano | findstr :8080
- 停止进程
stop-process 82932
我正在使用 GitBash,当 运行
时出现如下错误
taskkill //PID XXXX
ERROR: The process with PID 7420 could not be terminated. Reason: This
process can only be terminated forcefully (with /F option).
所以像下面这样使用 //F 并且工作正常
taskkill //F //PID XXXX
如果您使用 powershell 7+,这对我有用。只需将此功能添加到您的 $PROFILE 文件中即可。
function killport([parameter(mandatory)] [string] $uport){
if($upid = (Get-NetTCPConnection -LocalPort $uport -ErrorAction Ignore).OwningProcess){kill $upid}
}
然后只需使用 killport 8080
或者如果你更喜欢命令,你可以试试这个:
kill $(Get-NetTCPConnection -LocalPort 8761 -ErrorAction Ignore).OwningProcess
如何删除已分配给端口的当前 process/application?
例如:localhost:8080
第 1 步:
打开 cmd.exe(注意:您 可能 需要 运行 作为管理员,但这并不总是必要的),然后 运行 下面的命令:
netstat -ano | findstr :<PORT>
(将<PORT>
替换成你想要的端口号,但保留冒号)
红色圈出的区域为PID(进程标识符)。找到正在使用所需端口的进程的 PID。
第 2 步:
接下来,运行以下命令:
taskkill /PID <PID> /F
(这次没有冒号)
最后,您可以通过重新运行执行“步骤1”中的命令来检查操作是否成功。如果成功,您应该不会再看到该端口号的任何搜索结果。
如果你使用的是 GitBash
第一步:
netstat -ano | findstr :8080
第二步:
taskkill /PID typeyourPIDhere /F
(/F
强行终止进程)
第 1 步(已接受
netstat -ano | findstr :yourPortNumber
将步骤 2 更改为:
tskill typeyourPIDhere
注意:taskkill
在某些 git bash 终端
在 Windows PowerShell 版本 1 或更高版本中停止端口 3000 上的进程类型:
Stop-Process (,(netstat -ano | findstr :3000).split() | foreach {$[$.length-1]}) -Force
正如@morganpdx 所建议的,这里有一个更像 PowerShell 的更好版本:
Stop-Process -Id (Get-NetTCPConnection -LocalPort 3000).OwningProcess -Force
在命令行中使用:
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
如果您想使用 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
我们可以通过使用以下命令简单地重新启动 IIS 来避免这种情况:
IISRESET
对于 Windows 用户,您可以使用 CurrPorts 工具轻松关闭正在使用的端口:
你可以通过运行一个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
我是 Windows 上的 运行 zookeeper,但无法使用 zookeeper-stop.sh 在 2181 端口停止 ZooKeeper 运行,所以尝试了这个双斜杠“//”方法到 taskkill。成功了
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.
如果您已经知道端口号,向进程发送软件终止信号 (SIGTERM) 可能就足够了:
kill $(lsof -t -i :PORT_NUMBER)
使用 Windows 10 个默认工具:
- 第一步:
以管理员身份打开 Windows PowerShell
- 第二步:
查找端口 8080 的 PID(进程 ID):
netstat -aon | findstr 8080
TCP 0.0.0.0:8080 0.0.0.0:0 LISTEN 77777
- 第三步:
杀死僵尸进程:
taskkill /f /pid 77777
其中“77777”是您的 PID
使用GitBash的一行解决方案:
tskill `netstat -ano | grep LISTENING | findstr :8080 | sed -r 's/(\s+[^\s]+){4}(.*)//'`
将 8080 替换为您的服务器正在侦听的端口。
如果您需要经常使用它,请尝试在您的 ~/.bashrc
中添加以下功能:
function killport() {
tskill `netstat -ano | findstr LISTENING | findstr : | sed -r 's/^(\s+[^\s]+){4}(\d*)$//'`
}
并且只是 运行
killport 8080
如果您使用的是 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 让我们知道。
我知道这是一个很老的问题,但发现很容易记住,快速命令可以杀死正在使用端口的应用程序。
要求:npm@5.2.0^版本
npx kill-port 8080
您还可以在此处阅读有关 kill-port 的更多信息:https://www.npmjs.com/package/kill-port
有两种方法可以终止进程
选项 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
这是在 WSL2 中执行此操作的脚本
PIDS=$(cmd.exe /c netstat -ano | cmd.exe /c findstr : | awk '{print }')
for pid in $PIDS
do
cmd.exe /c taskkill /PID $pid /F
done
第一步
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 上使用 PowerShell,您只需要:
Get-Process -Id (Get-NetTCPConnection -LocalPort "8080").OwningProcess | Stop-Process
netstat -ano | findstr :PORT
kill PI
打开命令提示符并发出以下命令
netstat -ano|findstr "PID :8888"
输出会显示占用端口的进程id
发出以下命令以终止 PID
taskkill /pid 8912 /f
您将收到如下输出
SUCCESS: The process with PID 8860 has been terminated.
简单的 CMD 正在为我工作。好记
找到你想要杀死的端口号和运行下面的cmd
npx kill-port 8080
完成后端口停止并收到此消息
npx: installed 3 in 13.796s
Process on port 8080 killed
让我们自动化!
如果你像我一样经常遇到这个问题,制作一个 .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 步
Select 环境变量
第 3 步,共 4 步
Select 'path' 然后点击编辑按钮
第 4 步,共 4 步
点击'New'添加.bat文件存放路径。因为我将它保存在“../Documents/bats”文件夹中,所以我添加了这条路径。您的路径将取决于您保存此文件的位置。
打开CMD并测试。记住你的文件名将 运行 这个文件的单词。由于我将 .bat 文件保存为 'killport.bat' => 'killport' 是 运行 的单词。
运行 以管理员身份运行命令。然后在里面输入这段代码。
netstat -ano | findstr :<8080>
然后您可以在您的端口上看到 PID 运行。然后复制那个 PID 号。 (PID 是帮助识别硬件产品或注册软件产品的唯一编号。)然后在代码行下方键入并按回车键。
taskkill /PID <Enter the copied PID Number> /F
我为此编写了一个微型节点 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);
})
}
});
}
最简单的解决方案——我唯一记得的解决方案:
在 Windows Powershell
假设我们要在端口 8080
上停止进程- 获取进程:
netstat -ano | findstr :8080
- 停止进程
stop-process 82932
我正在使用 GitBash,当 运行
时出现如下错误taskkill //PID XXXX
ERROR: The process with PID 7420 could not be terminated. Reason: This process can only be terminated forcefully (with /F option).
所以像下面这样使用 //F 并且工作正常
taskkill //F //PID XXXX
如果您使用 powershell 7+,这对我有用。只需将此功能添加到您的 $PROFILE 文件中即可。
function killport([parameter(mandatory)] [string] $uport){
if($upid = (Get-NetTCPConnection -LocalPort $uport -ErrorAction Ignore).OwningProcess){kill $upid}
}
然后只需使用 killport 8080
或者如果你更喜欢命令,你可以试试这个:
kill $(Get-NetTCPConnection -LocalPort 8761 -ErrorAction Ignore).OwningProcess