123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 |
- 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
- }
|