如何关闭 Linux 上的某些特定端口?[关闭]

2024-09-30 16:17:00
admin
原创
183
摘要:问题描述:如何删除某些应用程序/进程已使用但未关闭的端口?例如:当我在我的 ubuntu 上运行 ssh 并在<PORT>我的系统上的某个端口上建立 ssh 连接隧道时,如果我的网络中断并断开连接,端口仍然打开,但 ssh 连接丢失,如何关闭<PORT>?解决方案 1:...

问题描述:

如何删除某些应用程序/进程已使用但未关闭的端口?

例如:当我在我的 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上的进程

  1. 获取进程:

netstat -ano | findstr :8080
  1. 停止进程

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..."

双击运行此文件

  1. 输入端口号(然后它会列出带有PID的进程)

  2. 输入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
相关推荐
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   601  
  华为IPD与传统研发模式的8大差异在快速变化的商业环境中,产品研发模式的选择直接决定了企业的市场响应速度和竞争力。华为作为全球领先的通信技术解决方案供应商,其成功在很大程度上得益于对产品研发模式的持续创新。华为引入并深度定制的集成产品开发(IPD)体系,相较于传统的研发模式,展现出了显著的差异和优势。本文将详细探讨华为...
IPD流程是谁发明的   7  
  如何通过IPD流程缩短产品上市时间?在快速变化的市场环境中,产品上市时间成为企业竞争力的关键因素之一。集成产品开发(IPD, Integrated Product Development)作为一种先进的产品研发管理方法,通过其结构化的流程设计和跨部门协作机制,显著缩短了产品上市时间,提高了市场响应速度。本文将深入探讨如...
华为IPD流程   9  
  在项目管理领域,IPD(Integrated Product Development,集成产品开发)流程图是连接创意、设计与市场成功的桥梁。它不仅是一个视觉工具,更是一种战略思维方式的体现,帮助团队高效协同,确保产品按时、按质、按量推向市场。尽管IPD流程图可能初看之下显得错综复杂,但只需掌握几个关键点,你便能轻松驾驭...
IPD开发流程管理   8  
  在项目管理领域,集成产品开发(IPD)流程被视为提升产品上市速度、增强团队协作与创新能力的重要工具。然而,尽管IPD流程拥有诸多优势,其实施过程中仍可能遭遇多种挑战,导致项目失败。本文旨在深入探讨八个常见的IPD流程失败原因,并提出相应的解决方法,以帮助项目管理者规避风险,确保项目成功。缺乏明确的项目目标与战略对齐IP...
IPD流程图   8  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用