在Go语言中,可以使用netos包来查询端口的占用进程。

下面是一个示例代码,它使用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函数进行尝试监听,并根据返回的错误信息进行判断。

golang查询端口的占用进程

原文地址: https://www.cveoy.top/t/topic/iFqH 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录