在Windows中,什么可以寻找端口8080,并尝试通过.BAT文件杀死它正在使用的进程?
在Windows中,什么可以寻找端口8080,并尝试通过.BAT文件杀死它正在使用的进程?
Answers:
这是开始您的命令:
FOR /F "tokens=4 delims= " %%P IN ('netstat -a -n -o ^| findstr :8080') DO @ECHO TaskKill.exe /PID %%P
如果您对批处理文件有信心,请删除@ECHO
。
FOR /F "tokens=4 delims= " %%P IN ('netstat -a -n -o ^| findstr :8080') DO TaskKill.exe /PID %%P
请注意,您可能需要针对不同的操作系统对此稍作更改。例如,在Windows 7上,您可能需要tokens=5
而不是tokens=4
。
如何运作
FOR /F ... %variable IN ('command') DO otherCommand %variable...
这使您可以执行command
并遍历其输出。每行都将填充到中%variable
,并且可以根据需要在任意位置扩展otherCommand
多次。 %variable
在实际使用中只能有一个字母名称,例如%V
。
"tokens=4 delims= "
这样一来,您就可以按空格将每一行分割开,并获取该行的第4个块,并将其填充到%variable
(在我们的示例中为%%P
)。 delims
看起来是空的,但实际上多余的空间很大。
netstat -a -n -o
只需运行它并找出。根据命令行帮助,它“显示所有连接和侦听端口。”,“以数字形式显示地址和端口号。”和“显示与每个连接关联的拥有进程ID”。我只是使用了这些选项,因为有人建议了它,但它确实起作用了:)
^|
这将获取第一个命令或程序(netstat
)的输出,并将其传递到第二个命令程序(findstr
)。如果您直接在命令行上使用此代码,而不是在命令字符串中使用,则应使用|
而不是^|
。
findstr :8080
这将过滤传递给它的所有输出,仅返回包含的行:8080
。
TaskKill.exe /PID <value>
这将使用进程ID终止正在运行的任务。
%%P instead of %P
在批处理文件中这是必需的。如果在命令提示符下执行此操作,则应%P
改用。
HELP FOR
在命令行上看到了很多的其他选择FOR
会给你,检查netstat -?
,findstr /?
以及TaskKill /?
对甚至更多的帮助。
tokens=4
我认为是Windows XP和tokens=5
Windows 7 /F
。
打开命令提示符并运行以下命令
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
,这里的3116是进程ID
要在命令行上找到特定的进程,请在下面的命令中使用8080是进程使用的端口
netstat -ano | findstr 8080
杀死进程使用下面的命令,这里21424是进程ID
taskkill /pid 21424 /F
使用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
因此,可以通过在findstr中添加“ LISTENING”来排除这些情况,如下所示:
FOR /F "tokens=5 delims= " %%P IN ('netstat -a -n -o ^| findstr :8085.*LISTENING') DO TaskKill.exe /PID %%P
要列出端口8080上运行的所有进程,请执行以下操作。
netstat -ano | 找到“ 8080”
TCP 0.0.0.0:8080 0.0.0.0:0 LISTENING 10612
TCP [::]:8080 [::]:0 LISTENING 10612
然后杀死进程运行以下命令
taskkill / F / PID 10612
使用以下内容创建了一个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
最后单击“ Enter”退出。
如果要终止正在监听8080端口的进程,则可以使用PowerShell。只需将Get-NetTCPConnection
cmdlet与结合Stop-Process
。
经过测试,可以在Windows 10或Windows Server 2016上与PowerShell 5一起使用。但是,我想它也应该在安装了PowerShell 5的旧Windows版本上工作。
这是一个例子:
PS C:\> Stop-Process -Id (Get-NetTCPConnection -LocalPort 8080).OwningProcess
Confirm
Are you sure you want to perform the Stop-Process operation on the following item: MyTestServer(9408)?
[Y] Yes [A] Yes to All [N] No [L] No to All [S] Suspend [?] Help (default is "Y"):
与Merlyn的回应类似,但这也处理以下情况:
这里是:
set serverPid=
for /F "tokens=5 delims= " %%P in ('netstat -a -n -o ^| findstr /E :8080 ') do set serverPid=%%P
if not "%serverPid%" == "" (
taskkill /PID %serverPid%
) else (
rem echo Server is not running.
)
脚步:
转到conf
您的Apache Tomcat服务器的文件夹。就我而言,apache-tomcat-7.0.61\conf
就像我正在使用apache-tomcat-7.0.61
打开server.xml
并根据需要将端口号从8080更改为任何其他端口。例如:8081、8082、8087等
现在转到bin
文件夹并运行shutdown.bat
现在,通过eclipse重新启动服务器。
现在,您的项目将正常运行。
如果有人在寻找Powershell脚本:
function Search-And-Destroy
{
param ( [Parameter(Mandatory=$true)][string]$port )
$lines = netstat -a -o -n | findstr $port
$ports = @()
ForEach($line In $lines)
{
$res = $($lines -split '\s+')
$ports += $res[5]
}
$ports = $ports | select -uniq
ForEach($port In $ports)
{
echo $(taskkill /F /PID $port)
}
}
此功能基本上可以完成上述功能,但是采用Powershell脚本格式,因此您可以将其添加到Powershell配置文件中。要找到您的个人资料的位置,请转到powershell并输入echo $profile
netstat
工具的基于PowerShell的包装器。
将此粘贴到命令行
FOR /F "tokens=5 delims= " %P IN ('netstat -ano ^| find "LISTENING" ^| find ":8080 "') DO (TASKKILL /PID %P)
如果要在批处理中使用pu %%P
而不是%P
netstat
工具已翻译成其他语言