如何在Windows中使用localhost上的端口杀死当前进程?


Answers:


1053

步骤1:

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

netstat -ano | findstr :PORT_NUMBER

(用所需的端口号替换PORT_NUMBER,但保留冒号)

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

第2步:

接下来,运行以下命令:

taskkill /PID PORT_NUMBER /F

(这次没有冒号)

最后,您可以通过重新运行“步骤1”中的命令来检查操作是否成功。如果操作成功,您将不会再看到该端口号的搜索结果。


不工作。仍然显示过程
Hardik Mandankaa

16
工作正常。就我而言,Tomcat在端口8080中运行,我需要再次启动Spring应用程序。 i.imgur.com/aVwSYvR.png非常 感谢。
雨果LM

16
运行taskkill时,我必须输入转义字符:taskkill //PID 12552 //F
Robert

1
接受的答案不适用于设置为在失败后重新启动的服务(这不是linux)
nurettin

1
我认为您的意思是PID_NUMBER,而不是PORT_NUMBERtaskkill /PID PORT_NUMBER /F
Marcin Kulik

132

第1步(与KavinduWije所写的答案相同):

netstat -ano | findstr :yourPortNumber

在步骤2中更改为:

tskill typeyourPIDhere 

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


1
没有为我找到它
Tzvi Gregory Kaidanov

1
@TzviGregoryKaidanov您面临什么问题?
afsarkhan10182

1
谢谢,它通过将taskkill更改为tskill起作用
Md Shoaib Alam

1
这是对我有用的解决方案。我正在使用GIT Bash。
dxhans5

1
可以通过将第一个命令的输出传递给第二个命令来完成此操作吗?
詹姆斯

114

使用Windows 10默认工具:

  • 步骤1:

以管理员身份打开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


1
如果无法查看cmd输出然后手动编写新命令,如何自动执行此过程并将这两个命令组合到一个bat文件中?
Serob_b

3
@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

94

如果您使用的是GitBash

步骤1:

netstat -ano | findstr :8080

第二步:

taskkill /PID typeyourPIDhere /F 

/F强行终止该过程)


双重削减对我
没用

2
@ kylexy1357尝试使用单个斜杠。“双斜杠”是/之前的转义字符,某些外壳不需要此字符
Robert

27

Windows PowerShell版本1或更高版本中,要在端口3000上停止进程,请输入:

停止进程(,(netstat -ano | findstr:3000).split()| foreach {$ [$ .length-1]})-强制


正如@morganpdx所建议的那样,这里有一些类似于PowerShell的更好的版本:

Stop-Process -Id(Get-NetTCPConnection -LocalPort 3000).OwningProcess -Force


'Stop-Process' is not recognized as an internal or external command,
绿色的

3
我发现这Stop-Process -Id (Get-NetTCPConnection -LocalPort 3000).OwningProcess -Force
可行

1
@Green您需要在Windows PowerShell中运行命令
todorm

1
第一个错误,seconf为我工作
Tom

24

在命令行中使用:

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

1
如果要在.bat中执行此操作,请将%a替换为%% a
Mahesh Narwade

23

如果您已经知道端口号,则可以将软件终止信号发送到进程(SIGTERM):

kill $(lsof -t -i :PORT_NUMBER)

如果您知道该端口正在使用IPv4,则也可以这样做lsof -nt -i4TCP:9001
乔什·哈布达斯


10

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

6

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

请参阅何时键入第一个命令以列出端口上的进程,但返回的内容为空。这意味着现在所有进程都被杀死。


我知道这可行,因为我已经对其进行了测试,正在尝试查找有关它的文档,您有吗?
DanStarns

@DanStarns,到目前为止,我只发现了这一点!docs.microsoft.com/zh-CN/windows/terminal
lazycipher

感谢您的时间,这不是我要查找的页面,而是包含终端中提供的所有功能的页面kill。如果发现的话请在这里张贴。
DanStarns

1
到目前为止,我对此还没有发现太多。如果发现任何问题,请发表。
lazycipher

4

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

4

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

这也适用于使用Google Cloud中特定端口号的套接字!感谢一吨
peevesy

0

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

IISRESET

0

使用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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.