golang端口占用检测
在运维开发的过程中,经常碰到这样的情况:启动某个应用前,需要先检测一下端口是否被其他的应用占用了,若占用了,能否得到占用进程的PID。后续可以根据这个PID,查找是哪个应用占据这端口,然后KILL掉。非常简单的需求,思路是:
利用 netstat 命令获取当前的相关端口号的PID,然后正则表达式过滤出相关的PID即可。
netstat -ano | findstr 8099
输出如下:

以windows 系统下为例,linux系统下,修改相关参数即可。代码如下:
// 传入查询的端口号
// 返回端口号对应的进程PID,若没有找到相关进程,返回-1
func portInUse(portNumber int) int {res := -1var outBytes bytes.BuffercmdStr := fmt.Sprintf("netstat -ano -p tcp | findstr %d", portNumber)cmd := exec.Command("cmd", "/c", cmdStr)cmd.Stdout = &outBytescmd.Run()resStr := outBytes.String()r := regexp.MustCompile(`\s\d+\s`).FindAllString(resStr, -1)if len(r) > 0 {pid, err := strconv.Atoi(strings.TrimSpace(r[0]))if err != nil {res = -1} else {res = pid}}return res
}
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
