golang查询端口的占用进程
在Go语言中,可以使用net和os包来查询端口的占用进程。
下面是一个示例代码,它使用net.ListenTCP函数来尝试监听指定端口,如果端口已被占用,则会返回一个net.OpError类型的错误,通过解析错误信息,可以获取到占用该端口的进程ID。
package main
import (
"fmt"
"net"
"os"
"strings"
)
func main() {
port := "8080"
listener, err := net.ListenTCP("tcp", &net.TCPAddr{
IP: net.ParseIP("0.0.0.0"),
Port: 8080,
})
if err != nil {
opErr, ok := err.(*net.OpError)
if !ok {
fmt.Println("Failed to listen:", err)
return
}
if strings.Contains(opErr.Error(), "address already in use") {
pid := strings.TrimPrefix(opErr.Err.Error(), "bind: ")
fmt.Println("Port", port, "is already in use by process", pid)
return
}
}
defer listener.Close()
fmt.Println("Port", port, "is available.")
}
在上面的示例中,我们尝试监听8080端口,如果端口已被占用,则会返回一个net.OpError类型的错误。我们通过判断错误信息中是否包含"address already in use"来确定端口是否被占用,如果是,则通过解析错误信息获取到占用该端口的进程ID,并打印出来。
需要注意的是,这种方法只能查询TCP端口的占用情况,如果要查询UDP端口的占用情况,可以使用net.ListenUDP函数进行尝试监听,并根据返回的错误信息进行判断。
原文地址: https://www.cveoy.top/t/topic/iFqH 著作权归作者所有。请勿转载和采集!