windows平台关闭占用特定端口的进程
进行web应用开发就一定会接触各种各样的服务器,而涉及到网络通信就少不了各种协议及端口。大多数时候服务器是工作正常的,但是往往有的时候会出现奇奇怪怪的问题。今天这个东西就是解决其中一个问题的方法。问题描述,有时候服务器异常关闭(或者表面上正常关闭),服务器使用的端口仍然被占用,所以当我们再启动服务器时就会说当前端口已经被占用。

例如,常见的错误描述:
错误: 代理抛出异常错误: java.rmi.server.ExportException: Port already in use: 1099; nested exception is: 
	java.net.BindException: Address already in use: JVM_Bind

那么很容易想到解决的办法就是关掉相关进程,于是打开任务管理器,打开资源监视器,找对应的进程号,最后关闭。问题在于有时候占用端口的进程往往不是我们所熟悉的进程,从名字上看不容易找到。所以就有了,命令来查看,找到并杀掉进程。

有没有更简便的办法呢,肯定是有的,既然上面用到了DOS命令,那么用批处理脚本结合上述命令不就很容易做我们想做的事了吗。

所以我查阅相关资料,查看了网上各路大神的博文,试着写了一段批处理脚本,该脚本可以杀掉指定端口的进程,这里贴出来仅供参考。脚本如下,只需保存为.bat文件即可,出现乱码则需要调整文件编码为ANSI。 在windows直接新建文本文件,直接保存(中文默认GBK),就不会出现乱码问题

懒人下载点此下载
 
@echo off
:: 检查权限 
>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"  
  
:: 如果上一条语句执行返回错误标志为 0,则表示当前非管理员权限运行
if '%errorlevel%' NEQ '0' (  
    echo 正在请求管理员权限...  
    goto UACPrompt  
) else ( goto gotAdmin )  
  
:UACPrompt  
    :: 创建并执行vbs脚本
    echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"  
    echo UAC.ShellExecute "%~s0", "", "", "runas", 1 >> "%temp%\getadmin.vbs"  
    "%temp%\getadmin.vbs"  
    exit /B  
  
:gotAdmin  
    :: 删除获取权限的vbs脚本
    if exist "%temp%\getadmin.vbs" ( del "%temp%\getadmin.vbs" )  
    pushd "%CD%"  
    CD /D "%~dp0"  

:: 允许变量延迟扩展
setlocal enabledelayedexpansion
title 关闭端口对应进程
echo 请谨慎操作,关闭某些特殊的进程可能会带来一些不稳定因素
set /p value=请输入端口号:
set a=0
for /f "tokens=*" %%i in ('netstat -aon ^| findstr "%value%"') do (
    set a=%%i
    set a=!a:~69,10!
)
:: 判断是否得到了进程id
if %a% equ 0 (
goto cannotGetPid
) else (
goto gotPid
)
:gotPid
:: 获取任务列表对应的任务名,以便判断需要结束的进程是否是期望值
for /f "tokens=*" %%i in ('tasklist ^| findstr "%a%"') do (
    set b=%%i
    set b=!b:~0,20!
)
:: 去除左边空格
:intercept_b
if "%b:~-1%"==" " set "b=%b:~0,-1%"&goto intercept_b
color c
set /p in=已找到端口 %value% 的相关进程 %b%, 请 #谨慎# 决定是否结束该进程?(y/n)
color f
:: 强行结束进程
if '%in%' == 'y' (
    taskkill /F /pid %a%
    echo 已结束进程, 按任意键退出
) else (
    echo 放弃执行, 按任意键退出
)
pause>nul
exit

:cannotGetPid
echo 未找打端口号 %value% 的相关进程, 按任意键退出
pause>nul
exit
It's
欢迎访问本站,欢迎留言、分享、点赞。愿您阅读愉快!
*转载请注明出处,严禁非法转载。
https://www.devsong.org
QQ留言 邮箱留言
头像
引用:
取消回复
提交
涂鸦
涂鸦
热门