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 ...
随机推荐
- 动态加载swiper,默认显示最后一个swiper-slide解决方案???
问题描述: 用ajax动态加载swiper-slide以后,由于我是自适应屏幕的尺寸来决定一屏显示多少图片,所以加了 slidesPerView:'auto'这条属性,加了这条属性过后,每次刷新页面的 ...
- Springboot测试类之@RunWith注解
@runWith注解作用: --@RunWith就是一个运行器 --@RunWith(JUnit4.class)就是指用JUnit4来运行 --@RunWith(SpringJUnit4ClassRu ...
- 201871010106-丁宣元 《面向对象程序设计(java)》第二周学习总结
丁宣元 <面向对象程序设计(java)>第二周学习总结 正文开头 项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在 ...
- android 8.0 悬浮窗 最简demo
MainActivity.java文件 package com.example.performance; import android.app.Activity; import android.con ...
- vs2008 vc90.pdb 不是创建此预编译头时使用的 pdb 文件,请重新创建预编译头
解决方案: 找到项目中的stdafx.cpp,右键属性,找到C/C++->预编译头, 设置为创建预编译头, 重新生成
- 学习:VB之4C法
前言:4C法对于单纯的本地验证的话应该比较好使,但是基于网络验证可能就不是很好用了,尽管到了第二个窗口,功能应该还是不能用 逆向过程: 1.直接载入OD,发现第一条汇编指令如下 0040120C &g ...
- 前端/H5/JS:通过URL下载文件并转存到其他服务器(微信),Blob文件转File文件
现在有一个图片URL,在自己服务器上,一个微信提供的媒体文件上传URL,我在前端通过JS实现转存微信服务器 1. http://file.xxx.com/asd.jpg 自己的 2.https://a ...
- es6 Class类的使用
es6新增了一种定义对象实例的方法,使用class关键字定义类,与class相关的知识点也逐步火热起来,但是部分理解起来相对抽象,简单对class相关的知识点进行总结,更好的使用class. 关于类有 ...
- zy的日志报表执行有问题。crontab显示执行了任务,代码中应该有问题
crontab定时任务在日志记录中是执行了 但是在执行脚本的过程中报错了, 找不到问题原因,以后也要在脚本中加入日志记录, 但是奇怪的是在中午和晚上是正常的, 应该是那个时间段的判断逻辑有问题,导致程 ...
- [RN] React Native Image 实现placeholder占位图
React Native Image 实现placeholder占位图 react-native Image没有placeholder这样的props,但是业务有需要这种场景, 解决方法为: 使用Im ...