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