Golang检测Linux服务器端口占用
- 代码实现
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服务器端口占用的更多相关文章
- 检测Linux服务器端口是否开通
现如今云服务器已经是大势所趋,国内比较著名的云服务器厂商有阿里.腾讯,国外有aws,尽管有的公司目前为止还是使用的物理机,但是无论你是使用的云服务器还是物理机,在运行服务时都必不可少的需要监听到指定的 ...
- linux(8)Linux 查看端口占用情况
前言 平常使用linux,我们经常需要查看哪个服务占用了哪个端口,接下来就为大家介绍了2种 Linux 查看端口占用情况可以使用 lsof 和 netstat 命令. 1. lsof -i:端口号 用 ...
- 【转】Linux 查看端口占用情况
Linux 查看端口占用情况可以使用 lsof 和 netstat 命令. lsof lsof(list open files)是一个列出当前系统打开文件的工具. lsof 查看端口占用语法格式: l ...
- Linux查看端口占用进程
Linux查看端口占用进程 netstat -anlp|grep 8081 tcp /java 此处3195为进程ID
- 转 linux 服务器内存占用统计
linux 服务器内存占用统计 原文: https://www.cnblogs.com/eaglediao/p/6641811.html 当前内存占用率的计算,是根据top命令显示的Mem.used ...
- windows和Linux查看端口占用进程并关闭
Windows: 以端口8080为例: 1.查找对应的端口占用的进程:netstat -aon|findstr "8080" ,找到占用8080端口对应的程序的PID号: ...
- 26. linux查看端口占用情况
linux系统下,查看端口占用情况的命令:lsof -i[root@www ~]# lsof -i
- 查看Linux下端口占用情况的命令
在使用Linux系统的过程中,有时候会遇到端口被占用而导致服务无法启动的情况.比如HTTP使用80端口,但当启动Apache时,却发现此端口正在使用. 这种情况大多数是由于软件冲突.或者默认端口设置不 ...
- linux服务器内存占用太高-释放内存
修改/proc/sys/vm/drop_caches,释放Slab占用的cache内存空间(参考drop_caches的官方文档): Writing to this will cause the ke ...
随机推荐
- ES6 入门系列 (一)ES6的前世今生
要学好javascript , ECMAScript标准比什么都强, ESMAScript标准已经用最严谨的语言和最完美的角度展现了语言的实质和特性. 理解语言的本质后,你已经从沙堆里挑出了珍珠,能经 ...
- EF自动创建数据库步骤之四(启用数据库初始器)
在创建完DBIfNotExistsInitializer数据库初始化器类后,需要在程序每一次访问数据库前,告诉EF使用该初始化器进行初始化. 代码如下 : Database.SetInitialize ...
- FCC-学习笔记 Pig Latin
FCC-学习笔记 Pig Latin 1>最近在学习和练习FCC的题目.这个真的比较的好,推荐给大家. 2>中文版的地址:https://www.freecodecamp.cn/;英文版 ...
- 分析mybatis中 #{} 和${}的区别
分析方法: 在 GenericTokenParser这个类的parse方法的这一行下个断点调试一下就明白了 builder.append(handler.handleToken(content)); ...
- android studio学习---Android studio 导入github工程
无论是那种方式,都最好是先把github上的工程项目下载到本地,然后修改文件再import 首先要知道 自己的build.gradle,在project下面的版本号是多少,比如我的: depende ...
- JavaWeb 发送邮件
我们可以使用第三方的邮箱服务器来发送邮件. 常用的邮件传输协议有2种:POP3/SMTP.IMAP/SMTP. POP和IMAP的区别:在邮箱客户端的操作,比如移动邮件.标记已读,如果使用POP,是不 ...
- Using hints for Postgresql
本文转自:http://pghintplan.osdn.jp/pg_hint_plan.html pg_hint_plan 1.1 pg_hint_plan Name Synopsis Descrip ...
- 8皇后问题SQL求解(回溯算法)
问题 八皇后问题是一个古老而著名的问题,是回溯算法的典型例题.该问题是十九世纪著名的数学家高斯1850年提出:在8X8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行.同一 ...
- Shiro RememberMe 1.2.4 反序列化漏洞详细复现
0x00 前言 今天上班的时候收到了一个复测的任务,打开一看,shiro反序列化漏洞,What?这是个什么东西,经百度查找后才知道,原来是Java的开发框架,好吧,还是没听说过..由于初测报告上的过程 ...
- 单文件WebUploader做大文件的分块和断点续传
前言: WebUploader是由Baidu WebFE(FEX)团队开发的一个简单的以HTML5为主,FLASH为辅的现代文件上传组件.在现代的浏览器里面能充分发挥HTML5的优势,同时又不摒弃主流 ...