55 lines
986 B
Go
55 lines
986 B
Go
//go:build linux
|
|
// +build linux
|
|
|
|
package main
|
|
|
|
import (
|
|
"os"
|
|
"os/exec"
|
|
"strconv"
|
|
)
|
|
|
|
type mainProgramStarter struct{}
|
|
|
|
func (s *mainProgramStarter) GetMainName() string {
|
|
return "main"
|
|
}
|
|
|
|
func (s *mainProgramStarter) Start(targetExe string) error {
|
|
if err := os.Chmod(targetExe, 0755); err != nil {
|
|
return err
|
|
}
|
|
cmd := exec.Command(targetExe)
|
|
cmd.Stdout = os.Stdout
|
|
cmd.Stderr = os.Stderr
|
|
|
|
// Linux 下:先保持最简单,保证能跑
|
|
return cmd.Start()
|
|
}
|
|
|
|
// 判断进程是否在运行
|
|
func (s *mainProgramStarter) IsProcessRunning(pid int) (bool, error) {
|
|
if pid <= 0 {
|
|
return false, nil
|
|
}
|
|
|
|
procPath := "/proc/" + strconv.Itoa(pid)
|
|
_, err := os.Stat(procPath)
|
|
if err == nil {
|
|
return true, nil
|
|
}
|
|
|
|
if os.IsNotExist(err) {
|
|
return false, nil
|
|
}
|
|
|
|
// 其他错误(例如权限问题)
|
|
return false, err
|
|
}
|
|
|
|
// 杀掉进程
|
|
func (l *mainProgramStarter) KillProcess(pid int) error {
|
|
cmd := exec.Command("kill", "-9", strconv.Itoa(pid))
|
|
return cmd.Run()
|
|
}
|