模拟QQ退出后自动重启,go build xxx.go 打包成exe运行。
processName 为你所需要的进程exe
processNamePath 为你所需要的进程路径
package mainimport ("bytes""errors""fmt""os""os/exec""regexp""strconv""time"
)var processName = "QQ.exe"
var processNamePath = "D:\\Program Files (x86)\\Tencent\\QQ\\Bin\\"func findProcessID(processName string) (int, error) {buf := bytes.Buffer{}cmd := exec.Command("wmic", "process", "get", "name,processid")cmd.Stdout = &bufcmd.Run()cmd2 := exec.Command("findstr", processName)cmd2.Stdin = &bufdata, _ := cmd2.CombinedOutput()if len(data) == 0 {return -1, errors.New("not find")}info := string(data)reg := regexp.MustCompile(`[0-9]+`)pid := reg.FindString(info)return strconv.Atoi(pid)
}func getNowTime() string {timeNow := time.Now().Format("2006-01-02 15:04:05")return timeNow
}func main() {pid, err := findProcessID(processName)if pid > 0 {fmt.Println("time:", getNowTime())fmt.Println(processName+" processID:", pid, " is running")}if err == nil {process, err := os.FindProcess(pid)if err != nil {fmt.Println("get process err:", err)return}process.Wait()}attr := &os.ProcAttr{Files: []*os.File{os.Stdin, os.Stdout, os.Stderr},Env: os.Environ(),}for {_, err := findProcessID(processName)if err != nil {p, err := os.StartProcess(processNamePath+processName, []string{}, attr)if err != nil {fmt.Println("err:", err)return}fmt.Println("time:", getNowTime())fmt.Println(processName+" restart pid:", p.Pid)p.Wait()time.Sleep(1 * time.Second)fmt.Println("start ", processName)}}
}