【问题标题】:How to find the ports that is being used by a process in golang or in general?如何在 golang 或一般情况下找到进程正在使用的端口?
【发布时间】:2015-07-08 01:31:32
【问题描述】:

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

在此之后,如果我有命令对象并且可以获得进程ID,我如何找到这是哪个端口?我正在尝试用 golang 编写我的应用程序。我也很好奇这是如何做到的。

【问题讨论】:

  • 如果您想从您的程序中获取此信息,只需在net.Listener 上使用Addr() 方法。如果你想把它放在外面,你可以做类似netstat 的事情,或者你可以让你的程序保存在某处使用的地址/端口(就像有多少守护进程写一个 pidfile)。

标签: shell go port pid


【解决方案1】:

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

netstat -npl

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

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

示例:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-29
    • 2020-09-15
    • 2015-01-28
    • 2014-04-08
    • 2012-12-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多