当前位置:首页 > Golang > 一个简单的Golang代码,监控windows进程退出并自动重启

宝塔服务器面板,一键全能部署及管理,送你3188元礼包,点我领取

一个简单的Golang代码,监控windows进程退出并自动重启

原创 2022-03-01 Golang 2007
分享给朋友:

这里模拟QQ退出后自动重启

只要修改

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\\"

func findProcessID(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()
   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)
      }
   }
}

go build xxx.go 打包成exe就可以运行了

声明:版权所有,违者必究 | 如未注明,均为原创 | 本网站采用 BY-NC-SA 协议进行授权

转载:转载请注明原文链接,违者必究 - :https://www.wolfcode.net/info/236/

分享给朋友:

相关文章

Gin框架参数多次绑定

在我们写的绝大部分的API代码当中,其实都是需要传递参数的,无论是通过 path、query string 还是 body,在 gin 当中,为我们提供了一系列的 binding 方法让我们可以把这些参数绑定到一个对象中,通过还可以通过 struct tag 来对参数进行校验,不知道到大家曾今是否和遇到过相同的困惑:

手摸手源码单机部署OpenIM实况教学

该操作均在CentOS7下进行这里不推荐直接使用 git clone --recursive 方式,因为大家都懂的网络问题!首先到 https://github.com/OpenIMSDK/Open-IM-Server 下载项目压缩包再到 https

gocron数据库表和字段字符集转换为utf8mb4

gocron_sql_convert_to_utf8mb4因为 gocron - 定时任务管理系统 默认表和字段字符集是utf8(也就是utf8mb3),所以在现下很多数据存储会有问题,最为突出的就是emoji表情写了一个简单的转换sql:git地址 有用到的小伙伴可以拿去直接转换

如何在Linux上做一个定时任务管理系统

gocron,使用Go语言开发的轻量级定时任务集中调度和管理系统, 用于替代Linux-crontab

微软推出Go语言从入门到上手的文档

微软有自己的技术文档专栏网站,可能很多小伙伴都不知道!除了自己的.NET语言,还包括了市面上绝大多数流行语言的技术文档都有。这次,微软把Go语言也加入到了自家技术文档网站中,而且绝大多数文档都是有中文版本的!点击直接访问:更多文档访问以下地址:https://docs.microsoft.com/z

go语言之gin框架初尝试

对于Webservice服务,几乎所有的企业都在使用restful风格的API。Gin也天然的支持restful。gin框架虽然不大,但是功能却不少。首先先配置好go环境,针对不同系统go的配置环境可能不一样。