package main import ( "fmt" "log" "math/rand" "os" "strings" "sync" "time" "github.com/shirou/gopsutil/process" ) const ( TestAkId = "lJSW0dXDcSQCKOYx1I2rEtCi" TestAkSecret = "2WnF0g81dEvwI5N3JMPaMFtY" TestHttpHost = "https://live-open.biliapi.com" ) func main() { // 判断当前服务有无在执行 processNum := GetPoccessNum() if processNum > 0 { fmt.Println("退出,当前运行的服务数", processNum) return } // rand.Seed(time.Now().UnixNano()) // host, port, authBody, err := GetWebsocketInfo(TestAkId, TestAkSecret) if err != nil { log.Fatalln("[main | GetWsInfo] err", err) return } c := NewBiliWsClient(&BiliWsClientConfig{ Host: host, Port: port, AuthBody: authBody, }) if c == nil { log.Fatalln("[main | NewBiliWsClient] client init err") return } wg := sync.WaitGroup{} wg.Add(1) go func() { c.Run() }() wg.Wait() log.Println("[main | NewBiliWsClient] exit.....") } func GetPoccessNum() int { // num := 0 // selfPID := os.Getpid() selfP, _ := process.NewProcess(int32(selfPID)) cmdLine, _ := selfP.Cmdline() // 运行go run main.go方式的忽略判断,因为不准 if strings.Contains(cmdLine, "exe/main") { return 0 } // 判断当前是否进程还有跑 pids, _ := process.Pids() for _, v := range pids { // 获取当前进程信息 if selfPID == int(v) { continue } // 获取要匹配的进程信息 p, _ := process.NewProcess(v) cmdline, _ := p.Cmdline() // if strings.Contains(cmdline, cmdLine) { // num++ // } if cmdline == cmdLine { num++ } // } return num }