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

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

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

原创 2022-03-01 其他 320
分享给朋友:

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

只要修改

processName 为你所需要的进程exe

processName_path 为你所需要的进程路径

package main

import (
    "bytes"
    "errors"
    "fmt"
    "os"
    "os/exec"
    "regexp"
    "strconv"
    "time"
)

var processName = "QQ.exe"
var processName_path = "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 runing")
    }
    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(processName_path+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

宝塔WebHook中自动git拉取没有反应解决方法

最近遇到一个比较奇怪的问题,所有操作都完成后,无论怎么测试,git pull一直都不会执行,也没有报错.

推荐一款出色的SSH工具

​Tabby是一款可无限定制的跨平台终端应用,用于本地shell、串行、SSH和Telnet连接。支持SFTP。

强烈推荐:一个快速处理json的第三方包

该第三方包采用go语言开发:先来看看官方的案例:package main import "github.com/tidwall/sjson" const json = `{"name":{&quot

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

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

为集群搭建一个定时任务集中调度系统

集群任务下,很多服务器的定时任务都单独集中在相对应的服务器crontab下,即使现在有了类似于宝塔之类的面板,但是定时任务还是得每台服务器单独登入后去配置。是否可以单独在一台机子上,控制所有的集群定时任务呢?答案是肯定的!!!gocron就可以做到,之前博主分享过单机搭建定时任务管理系统,那现在,我

Linux 日志清理

磁盘占用90%,占用过多,分析日志查看原因

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

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