admin 管理员组文章数量: 1184232
模拟QQ退出后自动重启,go build xxx.go 打包成exe运行。
processName 为你所需要的进程exe
processNamePath 为你所需要的进程路径
package main
import("bytes""errors""fmt""os""os/exec""regexp""strconv""time")var processName ="QQ.exe"var processNamePath ="D:\\Program Files (x86)\\Tencent\\QQ\\Bin\\"funcfindProcessID(processName string)(int,error){
buf := bytes.Buffer{}
cmd := exec.Command("wmic","process","get","name,processid")
cmd.Stdout =&buf
cmd.Run()
cmd2 := exec.Command("findstr", processName)
cmd2.Stdin =&buf
data,_:= cmd2.CombinedOutput()iflen(data)==0{return-1, errors.New("not find")}
info :=string(data)
reg := regexp.MustCompile(`[0-9]+`)
pid := reg.FindString(info)return strconv.Atoi(pid)}funcgetNowTime()string{
timeNow := time.Now().Format("2006-01-02 15:04:05")return timeNow
}funcmain(){
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)}}}版权声明:本文标题:Golang进阶之路:实现自动化重启,告别程序宕机 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.roclinux.cn/p/1771542109a3545793.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论