如何关闭某个端口号进程

简介: window下关闭占用某个端口方法

一、背景

我们在开发web程序时,端口占用情况时有发生,如何解决?

1.重启

(重启治百病~,1B259FD2.png),就是代价过大!

2.注销用户

ctrl+alt+del进入如下界面,选择注销用户后,重新登录!

1631780934.png

3.Java代码方式

根据网上大佬写的代码,运行后,输入要sha死的端口后即可!1B2B2A56.pngB++

效果如下

image.png

代码如下:

packagecom.tab343.tools;
importjava.io.BufferedReader;
importjava.io.IOException;
importjava.io.InputStream;
importjava.io.InputStreamReader;
importjava.util.ArrayList;
importjava.util.HashSet;
importjava.util.List;
importjava.util.Scanner;
importjava.util.Set;
importjava.util.regex.Matcher;
importjava.util.regex.Pattern;
/*** 强杀端口号*/publicclassKillServer {
privateSet<Integer>ports;
publicstaticvoidmain(String[] args) throwsInterruptedException {
System.out.println("请输入要杀掉的windows进程的端口号,如果有多个,则以逗号相隔");
System.out.println("Please input kill port");
Scannerscanner=newScanner(System.in);
Stringinput=scanner.next();
scanner.close();
String[] split=input.split(",");
Set<Integer>ports=newHashSet<Integer>();
for (Stringspid : split) {
try{
intpid=Integer.parseInt(spid);
ports.add(pid);
            }catch(Exceptione){
System.out.println("错误的端口号,请输入一个或者多个端口,以英文逗号隔开");
try {
Thread.sleep(5000);
                } catch (InterruptedExceptione1) {
e1.printStackTrace();
                }
System.exit(0);
            }
        }
KillServerkill=newKillServer();
kill.ports=ports;
System.out.println("need kill "+ports.size() +" num");
for (Integerpid : ports) {
kill.start(pid);
        }
System.out.println("清理完毕,程序即将退出");
System.out.println("SUCCESS");
Thread.sleep(5000);
System.exit(0);
    }
publicvoidstart(intport){
Runtimeruntime=Runtime.getRuntime();
try {
//查找进程号Processp=runtime.exec("cmd /c netstat -ano | findstr \""+port+"\"");
InputStreaminputStream=p.getInputStream();
List<String>read=read(inputStream, "UTF-8");
if(read.size() ==0){
System.out.println("找不到该端口的进程");
try {
Thread.sleep(6000);
System.exit(0);
                } catch (InterruptedExceptione) {
e.printStackTrace();
                }
            }else{
for (Stringstring : read) {
System.out.println(string);
                }
System.out.println("找到"+read.size()+"个进程,正在准备清理");
kill(read);
            }
        } catch (IOExceptione) {
e.printStackTrace();
        }
    }
/*** 验证此行是否为指定的端口,因为 findstr命令会是把包含的找出来,例如查找80端口,但是会把8099查找出来* @param str* @return*/privatebooleanvalidPort(Stringstr){
Patternpattern=Pattern.compile("^ *[a-zA-Z]+ +\\S+");
Matchermatcher=pattern.matcher(str);
matcher.find();
Stringfind=matcher.group();
intspstart=find.lastIndexOf(":");
find=find.substring(spstart+1);
intport=0;
try {
port=Integer.parseInt(find);
        } catch (NumberFormatExceptione) {
System.out.println("查找到错误的端口:"+find);
returnfalse;
        }
if(this.ports.contains(port)){
returntrue;
        }else{
returnfalse;
        }
    }
/*** 更换为一个Set,去掉重复的pid值* @param data*/publicvoidkill(List<String>data){
Set<Integer>pids=newHashSet<Integer>();
for (Stringline : data) {
intoffset=line.lastIndexOf(" ");
Stringspid=line.substring(offset);
spid=spid.replaceAll(" ", "");
intpid=0;
try {
pid=Integer.parseInt(spid);
            } catch (NumberFormatExceptione) {
System.out.println("获取的进程号错误:"+spid);
            }
pids.add(pid);
        }
killWithPid(pids);
    }
/*** 一次性杀除所有的端口* @param pids*/publicvoidkillWithPid(Set<Integer>pids){
for (Integerpid : pids) {
try {
Processprocess=Runtime.getRuntime().exec("taskkill /F /pid "+pid+"");
InputStreaminputStream=process.getInputStream();
Stringtxt=readTxt(inputStream, "GBK");
System.out.println(txt);
            } catch (IOExceptione) {
e.printStackTrace();
            }
        }
    }
privateList<String>read(InputStreamin,Stringcharset) throwsIOException{
List<String>data=newArrayList<String>();
BufferedReaderreader=newBufferedReader(newInputStreamReader(in, charset));
Stringline;
while((line=reader.readLine()) !=null){
booleanvalidPort=validPort(line);
if(validPort){
data.add(line);
            }
        }
reader.close();
returndata;
    }
publicStringreadTxt(InputStreamin,Stringcharset) throwsIOException{
BufferedReaderreader=newBufferedReader(newInputStreamReader(in, charset));
StringBuffersb=newStringBuffer();
Stringline;
while((line=reader.readLine()) !=null){
sb.append(line);
        }
reader.close();
returnsb.toString();
    }
}


目录
相关文章
|
7月前
杀死本地80端口被占用的进程,还你一片宁静乐土
杀死本地80端口被占用的进程,还你一片宁静乐土
|
7月前
|
Windows
windows环境下根据端口号查询进程编号并杀掉此进程
windows环境下根据端口号查询进程编号并杀掉此进程
|
4月前
|
网络协议 Linux
Linux查看端口监听情况,以及Linux查看某个端口对应的进程号和程序
Linux查看端口监听情况,以及Linux查看某个端口对应的进程号和程序
695 2
|
2月前
|
运维 Linux
Linux查找占用的端口,并杀死进程的简单方法
通过上述步骤和命令,您能够迅速识别并根据实际情况管理Linux系统中占用特定端口的进程。为了获得更全面的服务器管理技巧和解决方案,提供了丰富的资源和专业服务,是您提升运维技能的理想选择。
58 1
|
2月前
通过进程识别号查看SQLserve端口号
通过进程识别号查看SQLserve端口号
38 0
|
4月前
|
网络协议
Mac根据端口查询进程id的命令
这篇文章介绍了在Mac操作系统上如何使用两种命令来查询监听特定端口的进程ID。第一种方法是使用`netstat -anp tcp -v | grep 端口号`,例如`netstat -anp tcp -v | grep 80`,这将列出所有使用端口80的TCP连接及其相关信息。第二种方法是使用`lsof -P -n -i:端口号`,例如`lsof -P -n -i:8080`,这将显示使用指定端口的进程列表,包括进程ID、用户、文件描述符等信息。文章通过示例展示了如何使用这些命令,并提供了输出结果的截图。
338 2
|
4月前
|
Windows
Windows中如何查看被占用的端口、杀掉对应的进程
这篇文章介绍了在Windows系统中如何查看被占用的端口号以及如何杀掉占用端口的进程,包括使用命令提示符的`netstat -ano | findstr 端口号`命令查找进程PID,然后通过任务管理器或`taskkill /PID PID号`命令来结束进程。
Windows中如何查看被占用的端口、杀掉对应的进程
|
4月前
|
Linux Windows
Windows查找监听端口对应的进程及其路径
Windows查找监听端口对应的进程及其路径
120 0
|
5月前
|
运维 Python Windows
如何通过Python脚本查找并终止占用指定端口的进程
在日常的开发和运维过程中,某些端口被意外占用是一个常见的问题。这种情况可能导致服务无法启动或冲突。本文将介绍如何通过Python脚本查找并终止占用指定端口的进程,以确保系统的正常运行。
|
6月前
|
缓存 数据安全/隐私保护 虚拟化
windows端口被占用,无法通过netstat找到进程,占用的端口又不能修改,该怎么办?
项目运行时服务器8080端口被占用,常规`netstat`命令找不到占用进程。解决方法包括:1) 强制关机重启释放端口;2) 使用`netstat -anobq`或Windows 10的`Get-NetTCPConnection` PowerShell命令查找BOUND状态的进程;3) 调整Windows动态端口范围,避免冲突。注意,强制关机可能影响数据安全。
1382 2

相关实验场景

更多