我写了一个程序,让端口占用无路可逃


1. 基本介绍

作为一个 Java 工程师,经常会遇到这么个场景:IDEA 里的程序正在运行,此时直接关闭了 IDEA 而没有先关闭正在运行的服务。

在绝大多数情境下,此方式都无伤大雅,但总有一些抽风的场景运行的程序并没有被正常的关闭,也就导致了重启项目时将会提示 xxxx 端口已被占用。

Windows 下此方式解决也十分简单,在命令行输入下述两个命令即可根据端口关闭对应的进程。

# 端口占用进程
netstat -ano | findstr <port>

# 进程关闭
taskkill -PID <pid> -F

虽然说也不麻烦但却很繁杂,试想一下当遇到这种情况下,我需要先翻笔记找出这两个命令,在打开命令行窗口执行,一套连招下来相当影响编程情绪。

因此,我决定写一个程序能够便捷的实现这个操作,最好是带 GUI 页面。

2. 实现机制

说干就干,整个程序功能其实并不复杂,对于页面的展示要求也不高,我就确定下来了直接通过 Java Swing 实现 GUI 部分。而对于命令执行部分,在 Java 中提供了 Process 类可用于执行命令。

先让我们看下 Process 的作用方式,以最简单的 ping baidu.com 测试为例。

public void demo() {  
    ProcessBuilder processBuilder = new ProcessBuilder();  
    List<String> command = new ArrayList<>();  
    command.add("ping");  
    command.add("www.baidu.com");  
    processBuilder.command(command);  
    
    try {  
        Process process = processBuilder.start();  
        try (  
            InputStreamReader ir = new InputStreamReader(process.getInputStream(), "GBK");  
            BufferedReader br = new BufferedReader(ir)  
        ) {  
            String line;  
            while ((line = br.readLine()) != null) {  
                System.out.println(line);  
            }  
        }  
    } catch (IOException e) {  
        e.printStackTrace();  
    }  
}

运行上述的代码,在控制台可以得到下图结果:

在上述程序中,ProcessBuilder 用于构建命令,processBuilder.start() 则相当于你敲下回车执行,而执行的结果的则以 IO 流的形式返回,这里通过 readLine() 将返回的结果逐行的形式进行读取。

了解的大概原理之后,剩下的事情就简单了,只需要将之前提到的两个命令以同样的方式通过 Process 执行就可以,再通过 Java Swing 进行一个页面展示就可以。

具体的实现并不复杂,这里就不详细展开介绍,完整的项目代码已经上传到 GitHub,感兴趣的小伙伴可自行前往查看,仓库地址:windows-process

3. 程序介绍

下面主要介绍程序的使用与效果,开始前可以去上述提到的仓库 relase 里将打包完成的 exe 程序下载,下载地址

下载后启动 window process.exe 程序,在启动之后会先弹出下图的提示,这是因为使用了 exe4j 打包程序,选择确认即可。

选择确认之后即会展示下图页面,列表中展示的数据即 netstat -ano 命令返回的结果。

在选中列表任意一条进程记录后,会将该进程对应的端口号和 PID 填充至上面的输入框中。

同时,可在 Port 输入框中输入对应的端口号实现快速查询,若需要停止某个进程,则将点击对应端口进程记录其 PID 会自动填入输入框中,然后单击 Kill 按钮,成功停止进程后将会进行相应的提示。

最后的最后,再臭不要脸的给自己要个赞,觉得不错的可以去 GitHub 仓库上下载下来看看,如果能点个 star 更是万分感谢,这里再贴一下仓库地址:windows-process


文章作者: 烽火戏诸诸诸侯
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 烽火戏诸诸诸侯 !
  目录