Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Shell 如何在golang或一般情况下查找进程正在使用的端口?_Shell_Go_Port_Pid - Fatal编程技术网

Shell 如何在golang或一般情况下查找进程正在使用的端口?

Shell 如何在golang或一般情况下查找进程正在使用的端口?,shell,go,port,pid,Shell,Go,Port,Pid,我的二进制文件接受端口参数并启动http服务器。如果将0传递给-端口,它将找到一个空闲端口并在其上启动 在这之后,如果我有command对象,并且可以获取进程id,那么如何找到这是哪个端口?我正试图用戈兰语写我的申请书。我也很好奇这通常是如何做到的。这是特定于操作系统的,但在linux上你可以做到 netstat-npl 这将列出哪些程序正在侦听哪些端口 如果您只想从应用程序中打印出来,您可以使用另一种方式启动http服务器,方法是创建自己的tcp侦听器,然后调用http.service 例如:

我的二进制文件接受端口参数并启动http服务器。如果将0传递给-端口,它将找到一个空闲端口并在其上启动


在这之后,如果我有command对象,并且可以获取进程id,那么如何找到这是哪个端口?我正试图用戈兰语写我的申请书。我也很好奇这通常是如何做到的。

这是特定于操作系统的,但在linux上你可以做到

netstat-npl

这将列出哪些程序正在侦听哪些端口

如果您只想从应用程序中打印出来,您可以使用另一种方式启动http服务器,方法是创建自己的tcp侦听器,然后调用http.service

例如:

package main

import (
    "fmt"
    "net"
    "net/http"
    "os"
)

func main() {
    lsnr, err := net.Listen("tcp", ":0")
    if err != nil {
        fmt.Println("Error listening:", err)
        os.Exit(1)
    }
    fmt.Println("Listening on:", lsnr.Addr())
    err = http.Serve(lsnr, nil)
    fmt.Println("Server exited with:", err)
    os.Exit(1)
}
产出:

Listening on: [::]:53939

如果您想从程序中获取这些信息,只需使用上的
Addr()
方法即可。如果您想在外部使用它,您可以执行类似于
netstat
的操作,或者让您的程序将正在使用的地址/端口保存在某个地方(就像有多少个守护进程写入一个文件一样)。