web.go 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. package util
  2. import (
  3. "fmt"
  4. "os/exec"
  5. "runtime"
  6. "log"
  7. "strings"
  8. "strconv"
  9. )
  10. func KillProcessByName(processName string) error {
  11. var err error
  12. switch runtime.GOOS {
  13. case "linux", "darwin":
  14. killStatement := fmt.Sprintf(`kill -9 $(ps -ef | grep %s | grep -v grep | awk '{print $2}')`, processName)
  15. err = exec.Command("sh", "-c", killStatement).Start()
  16. case "windows":
  17. killStatement := fmt.Sprintf(`taskkill /F /IM %s`, processName)
  18. err = exec.Command("cmd", "/C", killStatement).Start()
  19. default:
  20. err = fmt.Errorf("unsupported platform")
  21. }
  22. return err
  23. }
  24. func KillProcess(port int) error {
  25. var err error
  26. switch runtime.GOOS {
  27. case "linux", "darwin":
  28. killStatement := fmt.Sprintf(`kill -9 $(lsof -i:%d -t)`, port)
  29. err = exec.Command("sh", "-c", killStatement).Start()
  30. case "windows":
  31. killStatement := fmt.Sprintf(`netstat -ano | findstr %d`, port)
  32. output, err := exec.Command("cmd", "/C", killStatement).Output()
  33. if err != nil {
  34. log.Fatal(err)
  35. }
  36. pidString := strings.TrimSpace(string(output))
  37. fields := strings.Fields(pidString)
  38. pid, err := strconv.Atoi(fields[len(fields)-1])
  39. if err != nil {
  40. log.Fatal(err)
  41. }
  42. killCommand := fmt.Sprintf("taskkill /F /PID %d", pid)
  43. err = exec.Command("cmd", "/C", killCommand).Start()
  44. if err != nil {
  45. log.Fatal(err)
  46. }
  47. default:
  48. err = fmt.Errorf("unsupported platform")
  49. }
  50. return err
  51. }
  52. func OpenBrowser(url string) error {
  53. var err error
  54. switch runtime.GOOS {
  55. case "linux":
  56. err = exec.Command("xdg-open", url).Start()
  57. case "windows":
  58. err = exec.Command("rundll32", "url.dll,FileProtocolHandler", url).Start()
  59. case "darwin":
  60. err = exec.Command("open", url).Start()
  61. default:
  62. err = fmt.Errorf("unsupported platform")
  63. }
  64. return err
  65. }
  66. // checkAvailablePort 端口可用检测,netstat 只适合linux
  67. func checkAvailablePort(port int) (res bool) {
  68. checkStatement := fmt.Sprintf(`lsof -i:%d -t`, port)
  69. output, err := exec.Command("sh", "-c", checkStatement).Output()
  70. if err != nil {
  71. return false
  72. }
  73. if len(output) > 0 {
  74. return false
  75. }
  76. return true
  77. }