如何关闭 Linux 上的某些特定端口?[关闭]
- 2024-09-30 16:17:00
- admin 原创
- 184
问题描述:
如何删除某些应用程序/进程已使用但未关闭的端口?
例如:当我在我的 ubuntu 上运行 ssh 并在<PORT>
我的系统上的某个端口上建立 ssh 连接隧道时,如果我的网络中断并断开连接,端口仍然打开,但 ssh 连接丢失,如何关闭<PORT>
?
解决方案 1:
步骤 1:
打开 cmd.exe(注意:您可能需要以管理员身份运行它,但这并非总是必要的),然后运行以下命令:
netstat -ano | findstr :<PORT>
(替换<PORT>
为您所需的端口号,但保留冒号)
红色圆圈区域显示 PID(进程标识符)。找到使用所需端口的进程的 PID。
第 2 步:
接下来运行以下命令:
taskkill /PID <PID> /F
(这次没有冒号)
最后,您可以通过重新运行“步骤 1”中的命令来检查操作是否成功。如果成功,您将不会再看到该端口号的搜索结果。
解决方案 2:
我知道这是一个很老的问题,但发现有一个很容易记住的快速命令可以终止正在使用端口的应用程序。
要求:npm@5.2.0^版本
npx kill-port 8080
您还可以在此处阅读有关 kill-port 的更多信息:https://www.npmjs.com/package/kill-port
解决方案 3:
有两种方法可以终止进程
选项 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 正在监听 18264
步骤 03
使用以下命令终止上面收到的 PID(在我的情况下 PID 是 18264)
taskkill /PID 18264 /f
解决方案 4:
使用Windows 10/11默认工具:
✔ 第一步:
以管理员身份打开 Windows PowerShell
✔ 第二步:
找到需要终止的端口的 ProcessID(例如 3000)
netstat -aon | findstr 3000
TCP 0.0.0.0:3000 监听 1234
✔ 第三步:
杀死僵尸进程:
taskkill /f /pid 1234
其中“ 1234 ”是您的 ProcessID (又名 PID)
*如果你使用适用于 Linux 的 Windows 子系统 (Ubuntu WSL),请提供额外提示:
✔ 第一步:
sudo lsof -t -i:3000
✔ 第二步:
sudo kill -9 1234
解决方案 5:
步骤 1(与KavinduWije所写的公认答案相同):
netstat -ano | findstr :yourPortNumber
将步骤 2 更改为:
tskill typeyourPIDhere
注意:taskkill
在某些 git bash 终端中不起作用
解决方案 6:
如果你使用 GitBash
第一步:
netstat -ano | findstr :8080
第二步:
taskkill /PID typeyourPIDhere /F
(/F
强制终止该进程)
解决方案 7:
最简单的解决方案 — — 我记得的唯一一个:
在 Windows Powershell 中
假设我们想停止端口8080上的进程
获取进程:
netstat -ano | findstr :8080
停止进程
stop-process 82932
解决方案 8:
如果您已经知道端口号,则可能只需向进程发送软件终止信号 (SIGTERM) 即可:
kill $(lsof -t -i :PORT_NUMBER)
解决方案 9:
在命令行中使用:
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
解决方案 10:
简单的 CMD 对我有用。容易记住
找到您想要终止的端口号并运行以下 cmd
npx kill-port 8080
完成后端口停止并收到此消息
npx: installed 3 in 13.796s
Process on port 8080 killed
解决方案 11:
在Windows PowerShell版本 1 或更高版本中,要停止端口 3000 上的进程,请输入:
停止进程(,(netstat -ano | findstr:3000).split()| foreach {$ [$ .length-1]})-Force
正如 @morganpdx 所建议的,这里有一个更像 PowerShell 的、更好的版本:
停止进程-Id(Get-NetTCPConnection-LocalPort 3000).OwningProcess-Force
解决方案 12:
打开命令提示符并发出以下命令
netstat -ano|findstr "PID :8888"
输出将显示占用端口的进程 ID
发出以下命令来终止 PID
taskkill /pid 8912 /f
您将收到如下输出
SUCCESS: The process with PID 8860 has been terminated.
解决方案 13:
如果您可以在 Windows 上使用 PowerShell,那么您只需要:
Get-Process -Id (Get-NetTCPConnection -LocalPort "8080").OwningProcess | Stop-Process
解决方案 14:
对于 Windows 用户,您可以使用CurrPorts工具轻松终止正在使用的端口:
解决方案 15:
我在 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.
解决方案 16:
让我们实现自动化!
如果您像我一样经常遇到这个问题,请创建一个.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”是运行它的单词。
解决方案 17:
以管理员身份运行 cmd。然后在其中输入此代码。
netstat -ano | findstr :<8080>
然后你就可以看到在你的端口上运行的 PID。然后复制该 PID 号。(PID 是一个唯一的编号,有助于识别硬件产品或注册的软件产品。)然后输入下面的代码行并按回车键。
taskkill /PID <Enter the copied PID Number> /F
解决方案 18:
如果您使用Windows 终端,那么终止过程可能就没那么繁琐了。我一直在使用 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>
看看当我输入第一个命令来列出端口上的进程时,它返回的是空的。这意味着现在所有进程都被终止了。
更新:是Stop-Processkill
的别名。感谢 @FSCKur 告知我们。
解决方案 19:
如果您使用 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
解决方案 20:
你可以通过运行 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
解决方案 21:
如果您想使用 Python 来执行此操作:请检查是否可以在 Python 中终止正在监听特定端口(例如 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
解决方案 22:
第一步
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
解决方案 23:
netstat -ano | findstr :PORT
kill PI
解决方案 24:
使用GitBash 的一行解决方案:
tskill `netstat -ano | grep LISTENING | findstr :8080 | sed -r 's/(s+[^s]+){4}(.*)//'`
将8080替换为您的服务器正在监听的端口。
如果您需要经常使用它,请尝试添加到您的~/.bashrc
功能中:
function killport() {
tskill `netstat -ano | findstr LISTENING | findstr :$1 | sed -r 's/^(s+[^s]+){4}(d*)$//'`
}
然后运行
killport 8080
解决方案 25:
我为此编写了一个小型的 node 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(`
`).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:
我正在使用 GitBash,运行时出现如下错误
taskkill //PID XXXX
错误:无法终止 PID 为 7420 的进程。原因:此进程只能强制终止(使用 /F 选项)。
因此像下面这样使用 //F 并且工作正常
taskkill //F //PID XXXX
解决方案 27:
这是在 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
解决方案 28:
我们可以通过简单地重新启动 IIS 来避免这种情况,使用以下命令:
IISRESET
- 2024年20款好用的项目管理软件推荐,项目管理提效的20个工具和技巧
- 2024年开源项目管理软件有哪些?推荐5款好用的项目管理工具
- 项目管理软件有哪些?推荐7款超好用的项目管理工具
- 项目管理软件哪个最好用?盘点推荐5款好用的项目管理工具
- 项目管理软件有哪些最好用?推荐6款好用的项目管理工具
- 项目管理软件有哪些,盘点推荐国内外超好用的7款项目管理工具
- 2024项目管理软件排行榜(10类常用的项目管理工具全推荐)
- 项目管理软件排行榜:2024年项目经理必备5款开源项目管理软件汇总
- 2024年常用的项目管理软件有哪些?推荐这10款国内外好用的项目管理工具
- 项目管理必备:盘点2024年13款好用的项目管理软件