package util import ( "fmt" "os/exec" "runtime" "log" "strings" "strconv" ) func KillProcessByName(processName string) error { var err error switch runtime.GOOS { case "linux", "darwin": killStatement := fmt.Sprintf(`kill -9 $(ps -ef | grep %s | grep -v grep | awk '{print $2}')`, processName) err = exec.Command("sh", "-c", killStatement).Start() case "windows": killStatement := fmt.Sprintf(`taskkill /F /IM %s`, processName) err = exec.Command("cmd", "/C", killStatement).Start() default: err = fmt.Errorf("unsupported platform") } return err } func KillProcess(port int) error { var err error switch runtime.GOOS { case "linux", "darwin": killStatement := fmt.Sprintf(`kill -9 $(lsof -i:%d -t)`, port) err = exec.Command("sh", "-c", killStatement).Start() case "windows": killStatement := fmt.Sprintf(`netstat -ano | findstr %d`, port) output, err := exec.Command("cmd", "/C", killStatement).Output() if err != nil { log.Fatal(err) } pidString := strings.TrimSpace(string(output)) fields := strings.Fields(pidString) pid, err := strconv.Atoi(fields[len(fields)-1]) if err != nil { log.Fatal(err) } killCommand := fmt.Sprintf("taskkill /F /PID %d", pid) err = exec.Command("cmd", "/C", killCommand).Start() if err != nil { log.Fatal(err) } default: err = fmt.Errorf("unsupported platform") } return err } func OpenBrowser(url string) error { var err error switch runtime.GOOS { case "linux": err = exec.Command("xdg-open", url).Start() case "windows": err = exec.Command("rundll32", "url.dll,FileProtocolHandler", url).Start() case "darwin": err = exec.Command("open", url).Start() default: err = fmt.Errorf("unsupported platform") } return err } // checkAvailablePort 端口可用检测,netstat 只适合linux func checkAvailablePort(port int) (res bool) { checkStatement := fmt.Sprintf(`lsof -i:%d -t`, port) output, err := exec.Command("sh", "-c", checkStatement).Output() if err != nil { return false } if len(output) > 0 { return false } return true }