ChatGPT解决这个技术问题 Extra ChatGPT

如何在 Windows 中终止当前使用 localhost 上的端口的进程? [关闭]

关闭。此问题不符合 Stack Overflow 准则。它目前不接受答案。我们不允许在 Stack Overflow 上提出有关通用计算硬件和软件的问题。您可以编辑问题,使其成为 Stack Overflow 的主题。 5个月前关闭。社区在 5 个月前审查了是否重新打开此问题并将其关闭:原始关闭原因未解决 改进此问题

如何删除已分配给端口的当前进程/应用程序?

例如:localhost:8080

npx 杀死端口 8080
显然,对于 Windows 10,npx kill-port 要么根本不工作,要么无法终止具有提升权限的进程。
@Pavindu 刚刚测试它可以在 Windows Server 2016 上正常运行,即使任务以提升的权限运行也是如此。

M
Mujeeb

步骤1:

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

网络统计-ano | findstr :<端口>

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

https://i.stack.imgur.com/lEpCZ.png

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

第2步:

接下来,运行以下命令:

taskkill /PID /F

(这次没有冒号)

https://i.stack.imgur.com/8k64x.png

最后,您可以通过重新运行“步骤 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
R
Rafał Figura

我知道这确实是个老问题,但发现很容易记住,快速命令可以杀死正在使用端口的应用程序。

要求:npm@5.2.0^ 版本

npx kill-port 8080

您还可以在此处阅读有关 kill-port 的更多信息:https://www.npmjs.com/package/kill-port


我不敢相信我不知道这个,非常有用,谢谢!
我不敢相信我从来没有向下滚动看到这个......当我忘记了 bash 命令时,我已经多次来到这个 SO 页面......这很容易记住
C
Community

第 1 步(与 KavinduWije 编写的已接受 answer 相同):

网络统计-ano | findstr :yourPortNumber

将步骤 2 更改为:

tskill typeyourPIDhere 

注意taskkill 在某些 git bash 终端中不起作用


这是对我有用的解决方案。我正在使用 GIT Bash。
N
Niroshan Ratnayake

有两种方法可以杀死进程

选项 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

就像杀死正在运行的端口的魅力一样。谢谢
J
Java

使用 Windows 10 默认工具:

第一步:

以管理员身份打开 Windows PowerShell

第二步:

查找端口 8080 的 PID (ProcessID):

netstat -aon | findstr 8080

TCP 0.0.0.0:8080 0.0.0.0:0 听 77777

第三步:

杀死僵尸进程:

taskkill /f /pid 77777

其中“77777”是您的 PID


如果无法查看 cmd 输出然后手动编写新命令,如何自动化该过程并将这两个命令组合在一个 bat 文件中?
@Serob_b set /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
U
Uchenna Nwanyanwu

如果你使用 GitBash

第一步:

netstat -ano | findstr :8080

第二步:

taskkill /PID typeyourPIDhere /F 

/F 强制终止进程)


@kylexy1357 尝试使用单斜杠。 “双斜杠”是在 / 之前的转义字符,某些 shell 不需要它
L
Luke Garrigan

最简单的解决方案——我记得的唯一一个:

在 Windows PowerShell 中

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

获取流程:

netstat -ano | findstr :8080

停止进程

stop-process 82932

这个帮助了我!我是win10~
F
Fellow Stranger

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

kill $(lsof -t -i :PORT_NUMBER)

如果您知道端口正在使用 IPv4,您也可以执行 lsof -nt -i4TCP:9001
我不得不杀 -9 $(lsof -t -i :PORT_NUMBER)
谢谢,其他答案太多了。从字面上看,只需要这个脚本
术语“lsof”未被识别为 cmdlet、函数、脚本文件的名称
u
ux.engineer

简单的 CMD 正在工作。容易记住

找到你想杀死的端口号并运行下面的 cmd

npx kill-port 8080

完成后端口停止并收到此消息

npx: installed 3 in 13.796s
Process on port 8080 killed

m
marvedly

在命令行中使用:

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 是什么?
t
todorm

在 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
W
Waqas Ahmed

打开命令提示符并发出以下命令

netstat -ano|findstr "PID :8888"

输出会显示占用端口的进程id

https://i.stack.imgur.com/pLq08.png

发出以下命令以终止 PID

taskkill /pid 8912 /f

您将收到如下输出

SUCCESS: The process with PID 8860 has been terminated.

E
Emanuele Fricano

如果您可以在 Windows 上使用 PowerShell,您只需要:

Get-Process -Id (Get-NetTCPConnection -LocalPort "8080").OwningProcess | Stop-Process

P
Peter Mortensen

对于 Windows 用户,您可以使用 CurrPorts 工具轻松杀死正在使用的端口:

https://i.stack.imgur.com/wSqrm.png


不需要 CurrPorts。在 Windows 10+ 中,您可以使用资源监视器,更准确地说是其网络选项卡。在底部窗格中,有一个部分列出了所有打开的端口以及使用这些端口的进程的 PID。
P
Peter Mortensen

我在 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.

D
Dharman

让我们自动化吧!

如果您像我一样经常遇到这个问题,请制作一个 .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

https://i.stack.imgur.com/Bry76.png

第 2 步(共 4 步)

选择环境变量

https://i.stack.imgur.com/AxVDy.png

第 3 步(共 4 步)

选择“路径”并单击编辑按钮

https://i.stack.imgur.com/3c0sS.png

第 4 步(共 4 步)

单击“新建”添加存储 .bat 文件的路径。因为我将它保存在“../Documents/bats”文件夹中,所以我添加了这个路径。您的路径将取决于您保存此文件的位置。

https://i.stack.imgur.com/wSdzm.png

打开CMD并测试。请记住您的文件名将运行此文件的单词。由于我将 .bat 文件保存为 'killport.bat' => 'killport' 是运行它的词。

https://i.stack.imgur.com/zaLxh.png


l
lazycipher

如果您使用的是 Windows Terminal,那么杀戮过程可能不会那么乏味。我一直在使用 Windows 终端,kill PID 可以很好地杀死端口上的进程,因为新的 Windows 终端支持某些 bash 命令。例如:kill 13300

因此,完整的过程将如下所示-

打开 Windows 终端

键入以下命令以显示在您要终止进程的端口上运行的进程。网络统计-ano | findstr:端口

键入以下以终止该进程。杀死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>

看看我何时键入了第一个命令来列出它返回为空的端口上的进程。这意味着所有进程现在都被杀死了。

更新:killStop-Process 的别名。谢谢@FSCKur 让我们知道。


我知道这是可行的,因为我对其进行了测试,我正在尝试查找有关它的文档,您有吗?
@DanStarns,到目前为止我只发现了这个! docs.microsoft.com/en-us/windows/terminal
感谢您的宝贵时间,这不是我要找的页面,一个包含终端中提供的所有功能的页面,例如 kill。如果我找到了,我会在这里发帖。
到目前为止,我还没有找到太多关于这方面的信息。如果您发现任何东西,请发布。
由于您对 kill 的困惑,我不得不投反对票。这与您选择的终端无关。任何傻瓜都知道,在 PS 中,您使用 Get-Command 来了解您正在运行的命令,它向您表明,在 Windows 上,kill 是 Stop-Process 的别名。在 Linux 上,它不是别名,而是本机命令。
C
Chandima Samarakoon

以管理员身份运行cmd。然后在其中输入此代码。

netstat -ano | findstr :<8080>

然后您可以看到 PID 在您的端口上运行。然后复制该PID号。 (PID 是有助于识别硬件产品或注册软件产品的唯一编号。)然后在代码行下方键入并按 Enter。

taskkill /PID <Enter the copied PID Number> /F

f
flopcoder

您可以通过运行 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

P
Peter Mortensen

如果您想使用 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 中使用特定端口号的套接字!万分感谢
r
ruscon

第一步

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 系统上无效。
h
harun ugur
netstat -ano | findstr :PORT
kill PI

I
Italo Borssatto

使用 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
D
Deekshith Anand

如果您使用 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

$PROFILE 文件在哪里?
s
shal

我为此编写了一个小节点 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);
            })
        }
    });
}

M
MyrionSC2

这是在 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

V
Vatsal Shah

我正在使用 GitBash,运行时出现如下错误

taskkill //PID XXXX ERROR: PID 7420 的进程无法终止。原因:这个进程只能被强制终止(使用 /F 选项)。

所以像下面这样使用 //F 并且工作正常

taskkill //F //PID XXXX


P
Peter Mortensen

我们可以通过简单的重启 IIS 来避免这种情况,使用以下命令:

IISRESET