Golang 查询占用端口的进程名 - 详细教程和示例代码
在 Golang 中,可以使用 net 包来查询占用指定端口的进程名。以下是一个示例代码:
package main
import (
"fmt"
"net"
"os"
"os/exec"
"runtime"
"strconv"
"strings"
)
func main() {
if len(os.Args) < 2 {
fmt.Println("Please provide a port number as an argument")
return
}
port, err := strconv.Atoi(os.Args[1])
if err != nil {
fmt.Println("Invalid port number")
return
}
processName, err := findProcessName(port)
if err != nil {
fmt.Println("Failed to find process name:", err)
return
}
fmt.Println("Process name:", processName)
}
func findProcessName(port int) (string, error) {
var cmd *exec.Cmd
switch runtime.GOOS {
case "windows":
cmd = exec.Command("netstat", "-ano")
case "linux":
cmd = exec.Command("netstat", "-tuln")
default:
return "", fmt.Errorf("Unsupported operating system: %s", runtime.GOOS)
}
output, err := cmd.Output()
if err != nil {
return "", err
}
lines := strings.Split(string(output), "\n")
for _, line := range lines {
fields := strings.Fields(line)
if len(fields) >= 2 && fields[1] == fmt.Sprintf(":%d", port) {
pid := fields[len(fields)-1]
processName, err := getProcessName(pid)
if err != nil {
return "", err
}
return processName, nil
}
}
return "", fmt.Errorf("No process found on port %d", port)
}
func getProcessName(pid string) (string, error) {
switch runtime.GOOS {
case "windows":
cmd := exec.Command("tasklist", "/FI", fmt.Sprintf("PID eq %s", pid), "/FO", "CSV", "/NH")
output, err := cmd.Output()
if err != nil {
return "", err
}
fields := strings.Split(string(output), ",")
if len(fields) >= 2 {
processName := strings.Trim(fields[0], "'")
return processName, nil
}
case "linux":
cmd := exec.Command("ps", "-p", pid, "-o", "comm=")
output, err := cmd.Output()
if err != nil {
return "", err
}
processName := strings.TrimSpace(string(output))
return processName, nil
}
return "", fmt.Errorf("Unsupported operating system: %s", runtime.GOOS)
}
在命令行中运行该程序,并提供一个端口号作为参数,它将输出占用该端口的进程名。例如:
go run main.go 8080
输出:
Process name: chrome.exe
请注意,此代码在不同的操作系统上使用了不同的命令来查询进程名。在 Windows 上,它使用 tasklist 命令,而在 Linux 上,它使用 ps 命令。如果需要在其他操作系统上运行,请根据需要修改代码。
原文地址: https://www.cveoy.top/t/topic/fKIP 著作权归作者所有。请勿转载和采集!