• 代码实现
func CheckPort(port int) error {
checkStatement := fmt.Sprintf(`netstat -anp | grep -q %d ; echo $?`, port)
output, err := exec.Command("sh", "-c", checkStatement).CombinedOutput()
if err != nil {
return err
}
// log.Println(output, string(output)) ==> [48 10] 0 或 [49 10] 1
result, err := strconv.Atoi(strings.TrimSuffix(string(output), "\n"))
if err != nil {
return err
}
if result == 0 {
return fmt.Errorf("端口%d已被占用", port)
} return nil
}

- **纠错思路**

  • 第8行原代码为:result, err := strconv.Atoi(string(output)),

    报错为: strconv.Atoi: parsing "0\n": invalid syntax
  • 经排查,CombinedOutput()函数的执行结果0\n(1\n)包含换行符\n,

    利用strings.TrimSuffix()函数删除换行符\n



  • 延伸知识
    • strings.TrimSuffix()strings.TrimRight()的区别
func main() {
str1 := "abcdabceeebdc"
str2 := "abcd"
str3 := "abced"
str4 := "ebdc"
// `TrimRight(s, cutset string) string`指从`s`右端开始,删除所有`cutset`中出现的字符
// 若从右到左的过程中遇到其他字符,则停止删除。
fmt.Println(strings.TrimRight(str1, str2))
fmt.Println("空行:", strings.TrimRight(str1, str3)) // `TrimSuffix(s, suffix string)`删除后缀`suffix` ,若不匹配,返回s
fmt.Println(strings.TrimSuffix(str1, str4))
fmt.Println(strings.TrimSuffix(str1, str2))
} // 输出结果:
// abcdabceee
// 空行:
// abcdabcee
// abcdabceeebdc

2019-09-24改

func CheckPort(port int) error {
checkStatement := fmt.Sprintf("netstat -anp | grep -q %d ", port)
output, err := exec.Command("sh", "-c", checkStatement).CombinedOutput()
if err != nil {
return nil // err != nil 说明端口没被占用
} if len(output) > 0 {
return fmt.Errorf("端口%d已被占用", port)
} return nil
}

注:以上方法的缺陷是目标操作系统上有可能没有netstat命令

2019-09-29改


func CheckPort(port string) error {
var err error tcpAddress, err := net.ResolveTCPAddr("tcp4", ":" + port)
if err != nil {
return err
} for i := 0; i < 3; i++ {
listener, err := net.ListenTCP("tcp", tcpAddress)
if err != nil {
time.Sleep(time.Duration(100) * time.Millisecond)
if i == 3 {
return err
}
continue
} else {
listener.Close()
break
}
} return nil
}

Golang检测Linux服务器端口占用的更多相关文章

  1. 检测Linux服务器端口是否开通

    现如今云服务器已经是大势所趋,国内比较著名的云服务器厂商有阿里.腾讯,国外有aws,尽管有的公司目前为止还是使用的物理机,但是无论你是使用的云服务器还是物理机,在运行服务时都必不可少的需要监听到指定的 ...

  2. linux(8)Linux 查看端口占用情况

    前言 平常使用linux,我们经常需要查看哪个服务占用了哪个端口,接下来就为大家介绍了2种 Linux 查看端口占用情况可以使用 lsof 和 netstat 命令. 1. lsof -i:端口号 用 ...

  3. 【转】Linux 查看端口占用情况

    Linux 查看端口占用情况可以使用 lsof 和 netstat 命令. lsof lsof(list open files)是一个列出当前系统打开文件的工具. lsof 查看端口占用语法格式: l ...

  4. Linux查看端口占用进程

    Linux查看端口占用进程 netstat -anlp|grep 8081 tcp /java 此处3195为进程ID

  5. 转 linux 服务器内存占用统计

    linux 服务器内存占用统计  原文: https://www.cnblogs.com/eaglediao/p/6641811.html 当前内存占用率的计算,是根据top命令显示的Mem.used ...

  6. windows和Linux查看端口占用进程并关闭

    Windows: 以端口8080为例: 1.查找对应的端口占用的进程:netstat  -aon|findstr  "8080"    ,找到占用8080端口对应的程序的PID号: ...

  7. 26. linux查看端口占用情况

    linux系统下,查看端口占用情况的命令:lsof -i[root@www ~]# lsof -i

  8. 查看Linux下端口占用情况的命令

    在使用Linux系统的过程中,有时候会遇到端口被占用而导致服务无法启动的情况.比如HTTP使用80端口,但当启动Apache时,却发现此端口正在使用. 这种情况大多数是由于软件冲突.或者默认端口设置不 ...

  9. linux服务器内存占用太高-释放内存

    修改/proc/sys/vm/drop_caches,释放Slab占用的cache内存空间(参考drop_caches的官方文档): Writing to this will cause the ke ...

随机推荐

  1. 关于html的相关讲解

    浏览器chrome Chrome它内部有一个解析器,这个解析器就是解析我们的代码,各个浏览器的内核不一样,所以存在浏览器的兼容.这个内核是一个引擎. 谷歌的内核是webkit 引擎是v8. 客户端的请 ...

  2. pdf.js实现图片在线预览

    项目需求 前段时间项目中遇到了一个模块,是关于在线预览word文档(PDF文件)的,所以,找了很多插件,例如,pdf.js,pdfobject.js框架,但是pdfobject.js框架对于IE浏览器 ...

  3. 英语AmbraGrisea龙涎香

    龙涎香AmbraGrisea是抹香鲸科动物抹香鲸的肠内分泌物的干燥品.取自宰杀的抹香鲸肠内分泌物(即鲸鱼的粪便,它是抹香鲸吞食墨鱼后,胃肠道分泌出来的灰黑色的蜡状排泄物).其味甘.气腥.性涩,具有行气 ...

  4. JavaScript深入浅出第3课:什么是垃圾回收算法?

    摘要: JS是如何回收内存的? <JavaScript深入浅出>系列: JavaScript深入浅出第1课:箭头函数中的this究竟是什么鬼? JavaScript深入浅出第2课:函数是一 ...

  5. canal中间件

    简介: 基于数据库增量(模拟MySQL slave的交互协议)日志解析,提供增量数据订阅和消费(客户端与canal建立关系) 安装版本:1.1.0 git 环境需求: jdk1.7以上 mysql开启 ...

  6. elastic常用工具

    elasticsearch 常用工具: elasticsearch-dump :备份 elasticsearch-head :数据展示.操作平台 elasticsearch-head github 地 ...

  7. UNITY Serializer 序列化 横向对比

    UNITY Serializer 序列化 横向对比 关于序列化,无论是.net还是unity自身都提供了一定保障.然而人总是吃着碗里想着锅里,跑去github挖个宝是常有的事.看看各家大佬的本事.最有 ...

  8. PHP的SOLID设计原则

    SOLID Design Principles, 这是一个比设计模式更高级别的概念, 以构建良好代码为目标,真正掌握了就是大师级别了. 我~~~仅知晓~ /*SOLID Design Principl ...

  9. 使用WIFI网卡的AP功能

    前几篇博客中,wifi无线网卡都工作于STA模式,那么它能否工作于AP模式.本篇博客就研究使wifi 无线网卡工作于AP模式.使用一个应用程序hostapd,关于它的介绍可以去此网站https://w ...

  10. Windows中的txt文件到Mac打开是乱码 解决办法

    在Mac下打开“文本编辑”程序之后,选择菜单“文本编辑” -> “偏好设置”.2)在“偏好设置”中选择第二个标签页“打开和存储”,选择“纯文本文件编码”中的“打开文件”和“存储文件”修改成为“中 ...