当前位置: 首页 > news >正文

go自定义端口监听停用-------解决端口被占用的问题

代码

package mainimport ("fmt""log""net""os/exec""strconv""strings"
)func getSelect(beign int, end int) int {var num intfor {_, err := fmt.Scan(&num)if err != nil {fmt.Println("输入错误,请重新输入!")continue}if num < beign || num > end {fmt.Println("输入不在指定范围(1-10)之内,请重新输入!")continue}break}return num
}func main() {for {var port intfor {fmt.Print("请输入要检测的端口号:")_, err := fmt.Scanln(&port)if err != nil {fmt.Println("输入错误,请重新输入!")continue}break}// 检测端口是否被占用if isPortInUse(port) {fmt.Printf("端口号:%d 该端口号已经被占用\n", port)fmt.Print("请选择是否停用(1.是 2.否):")if getSelect(1, 2) == 1 {stopProcessOnPort(port)}fmt.Scanln()} else {fmt.Printf("端口号:%d没有被占用\n", port)}fmt.Printf("\n\n")}
}// 检测端口是否被占用
func isPortInUse(port int) bool {listener, err := net.Listen("tcp", ":"+strconv.Itoa(port))if err != nil {return true}defer listener.Close()return false
}// 停止占用指定端口的进程
func stopProcessOnPort(port int) {cmd := exec.Command("netstat", "-ano")output, err := cmd.Output()if err != nil {log.Fatal(err)}lines := strings.Split(string(output), "\n")for _, line := range lines {fields := strings.Fields(line)if len(fields) >= 4 && strings.HasSuffix(fields[1], ":"+strconv.Itoa(port)) {pid, err := strconv.Atoi(fields[4])if err != nil {log.Println("无法获取该端口号的id:", err)return}killCmd := exec.Command("taskkill", "/F", "/PID", strconv.Itoa(pid))if err := killCmd.Run(); err != nil {log.Println("终止该进程失败:", err)return}fmt.Printf("进程号 %d 端口号 %d 已经被停止\n", pid, port)return}}
}

运行

在这里插入图片描述

运行链接

b站运行视频

相关文章:

  • Vue3 setup语法糖
  • 用Java写一个王者荣耀游戏
  • 用C++和python混合编写数据采集程序?
  • 【1day】华天软件 OAworkFlowService接口SQL注入漏洞学习
  • 基于英特尔平台及OpenVINO2023工具套件优化文生图任务
  • MongoDB的原子性和多文档事务处理
  • 如何绕过某讯手游保护系统并从内存中获取Unity3D引擎的Dll文件
  • ChatGPT 的 18 种玩法,你还不会用吗?
  • 计算机组成学习-数据的表示和运算总结
  • 【服务部署】常用内网穿透方案
  • 【深度学习实验】图像处理(四):PIL——自定义图像数据增强操作(图像合成;图像融合(高斯掩码))
  • Xshell全局去除提示音
  • 阿里云ACE认证之国际版与国内版对比!
  • Java数据结构之《构造哈夫曼树》题目
  • 使用FFmpeg开发2-比特流过滤器
  • Apache Zeppelin在Apache Trafodion上的可视化
  • centos安装java运行环境jdk+tomcat
  • express如何解决request entity too large问题
  • js学习笔记
  • python 学习笔记 - Queue Pipes,进程间通讯
  • ReactNative开发常用的三方模块
  • 从setTimeout-setInterval看JS线程
  • 如何正确配置 Ubuntu 14.04 服务器?
  • 深度学习中的信息论知识详解
  • 温故知新之javascript面向对象
  • 一加3T解锁OEM、刷入TWRP、第三方ROM以及ROOT
  • 优秀架构师必须掌握的架构思维
  • 怎么将电脑中的声音录制成WAV格式
  • 自制字幕遮挡器
  • shell使用lftp连接ftp和sftp,并可以指定私钥
  • ​Linux·i2c驱动架构​
  • ​软考-高级-系统架构设计师教程(清华第2版)【第12章 信息系统架构设计理论与实践(P420~465)-思维导图】​
  • ​香农与信息论三大定律
  • #pragma预处理命令
  • (11)MSP430F5529 定时器B
  • (pojstep1.1.1)poj 1298(直叙式模拟)
  • (solr系列:一)使用tomcat部署solr服务
  • (阿里巴巴 dubbo,有数据库,可执行 )dubbo zookeeper spring demo
  • (八十八)VFL语言初步 - 实现布局
  • ******IT公司面试题汇总+优秀技术博客汇总
  • ... 是什么 ?... 有什么用处?
  • .NET Core SkiaSharp 替代 System.Drawing.Common 的一些用法
  • .Net Remoting(分离服务程序实现) - Part.3
  • .NET 中 GetProcess 相关方法的性能
  • .net 桌面开发 运行一阵子就自动关闭_聊城旋转门家用价格大约是多少,全自动旋转门,期待合作...
  • .NET/MSBuild 中的发布路径在哪里呢?如何在扩展编译的时候修改发布路径中的文件呢?
  • .py文件应该怎样打开?
  • /deep/和 >>>以及 ::v-deep 三者的区别
  • ??如何把JavaScript脚本中的参数传到java代码段中
  • @RestController注解的使用
  • [2015][note]基于薄向列液晶层的可调谐THz fishnet超材料快速开关——
  • [20150707]外部表与rowid.txt
  • [23] GaussianAvatars: Photorealistic Head Avatars with Rigged 3D Gaussians
  • [BZOJ 3680]吊打XXX(模拟退火)
  • [BZOJ4010]菜肴制作