通过查找.BAT中使用的端口来终止进程

Mik*_*ynn 119 windows process batch-file kill-process

在Windows中,什么可以查找端口8080并尝试通过.BAT文件终止它正在使用的进程?

Moh*_*ngh 192

打开命令提示符并运行以下命令

 C:\Users\username>netstat -o -n -a | findstr 0.0:3000
   TCP    0.0.0.0:3000      0.0.0.0:0              LISTENING       3116

C:\Users\username>taskkill /F /PID 3116
Run Code Online (Sandbox Code Playgroud)

,这里3116是进程ID

  • 很有用 !请注意我搜索:3000而不是0.0:3000,因为它可能低于127.0.01而不是0.0.0.0 (3认同)
  • 谢谢,伟大的工作杀死一个失控的webpack开发任务:) (2认同)

Mer*_*ham 135

这是一个让你入门的命令:

FOR /F "tokens=4 delims= " %%P IN ('netstat -a -n -o ^| findstr :8080') DO @ECHO TaskKill.exe /PID %%P
Run Code Online (Sandbox Code Playgroud)

如果您对批处理文件有信心,请删除@ECHO.

FOR /F "tokens=4 delims= " %%P IN ('netstat -a -n -o ^| findstr :8080') DO TaskKill.exe /PID %%P
Run Code Online (Sandbox Code Playgroud)

请注意,对于不同的操作系统,您可能需要稍微更改一下.例如,在Windows 7上,您可能需要tokens=5代替tokens=4.

这是如何工作的

FOR /F ... %variable IN ('command') DO otherCommand %variable...
Run Code Online (Sandbox Code Playgroud)

这使您可以执行command并循环其输出.每条线都会被塞进去,无论你喜欢什么%variable,都可以随意扩展otherCommand. %variable在实际使用中只能有一个单字母的名称,例如%V.

"tokens=4 delims= "
Run Code Online (Sandbox Code Playgroud)

这允许你按空格分割每一行,并取出该行中的第4个块,并将其填入%variable(在我们的例子中%%P). delims看起来很空,但额外的空间实际上很重要.

netstat -a -n -o
Run Code Online (Sandbox Code Playgroud)

只需运行它就可以找到答案.根据命令行帮助,它"显示所有连接和侦听端口.","以数字形式显示地址和端口号."和"显示与每个连接关联的拥有进程ID".我只是使用这些选项,因为别人建议它,它碰巧工作:)

^|
Run Code Online (Sandbox Code Playgroud)

这将获取第一个命令或程序(netstat)的输出,并将其传递给第二个命令程序(findstr).如果您直接在命令行上使用它,而不是在命令字符串中,您将使用|而不是^|.

findstr :8080
Run Code Online (Sandbox Code Playgroud)

这会过滤传递给它的任何输出,只返回包含的行:8080.

TaskKill.exe /PID <value>
Run Code Online (Sandbox Code Playgroud)

这会使用进程ID终止正在运行的任务.

%%P instead of %P
Run Code Online (Sandbox Code Playgroud)

这在批处理文件中是必需的.如果您在命令提示符下执行此操作,则可以使用%P.

  • 这很棒.`tokens = 4`是我认为的Windows XP和`tokens = 5`Windows 7.对于`/ F`也是一个好主意强制杀人. (9认同)
  • FOR/F"tokens = 5 delims ="%% P IN('netstat -a -n -o ^ | findstr:8080')DO TaskKill.exe/F/PID %% P (5认同)

Gir*_*ore 52

要在命令行上查找特定进程,请使用以下命令:8080是进程使用的端口

netstat -ano | findstr 8080
Run Code Online (Sandbox Code Playgroud)

杀死进程使用下面命令21424是进程ID

taskkill /pid 21424 /F 
Run Code Online (Sandbox Code Playgroud)


Sol*_*ris 19

使用Merlyn的解决方案导致其他应用程序像firefox一样被杀死.这些进程使用相同的端口,但不是作为监听器:

例如:

netstat -a -n -o | findstr :8085
  TCP    0.0.0.0:8085           0.0.0.0:0              LISTENING       6568
  TCP    127.0.0.1:49616        127.0.0.1:8085         TIME_WAIT       0
  TCP    127.0.0.1:49618        127.0.0.1:8085         TIME_WAIT       0
Run Code Online (Sandbox Code Playgroud)

因此,可以通过向findstr添加"LISTENING"来排除这些,如下所示:

FOR /F "tokens=5 delims= " %%P IN ('netstat -a -n -o ^| findstr :8085.*LISTENING') DO TaskKill.exe /PID %%P
Run Code Online (Sandbox Code Playgroud)


小智 18

要列出在端口8080上运行的所有进程,请执行以下操作.

netstat -ano | 找到"8080"

TCP    0.0.0.0:8080           0.0.0.0:0              LISTENING       10612

TCP    [::]:8080              [::]:0                 LISTENING       10612
Run Code Online (Sandbox Code Playgroud)

然后杀死进程运行以下命令

taskkill/F/PID 10612


xtr*_*trm 13

谢谢大家,只是添加一些进程不会关闭,除非/ F强制开关也与TaskKill一起发送.同时使用/ T开关,将关闭进程的所有辅助线程.

C:\>FOR /F "tokens=5 delims= " %P IN ('netstat -a -n -o ^|
 findstr :2002') DO TaskKill.exe /PID %P /T /F
Run Code Online (Sandbox Code Playgroud)

对于服务,有必要获取服务的名称并执行:

sc停止ServiceName


Sir*_*dda 6

创建了一个包含以下内容的 bat 文件,它接受端口号的输入

@ECHO ON
set /p portid=Enter the Port to be killed: 
echo %portid%                                                                              
FOR /F "tokens=5" %%T IN ('netstat -a -n -o ^| findstr %portid% ') DO (
SET /A ProcessId=%%T) &GOTO SkipLine                                                   
:SkipLine                                                                              
echo ProcessId to kill = %ProcessId%
taskkill /f /pid %ProcessId%
PAUSE
Run Code Online (Sandbox Code Playgroud)

最后点击“Enter”退出。