zhangmeng
2019-12-31 0613a9e6306026713501d90b9d02fb7ffbebf054
add restart
2个文件已修改
31 ■■■■■ 已修改文件
main.go 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
proc/reaper.go 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
main.go
@@ -4,12 +4,16 @@
    "analysis/logo"
    "analysis/proc"
    "analysis/util"
    "fmt"
    "runtime/debug"
    "strconv"
    "time"
    "context"
    "flag"
    "os"
    "os/exec"
    "os/signal"
    "golang.org/x/sys/unix"
@@ -147,6 +151,8 @@
    if role == single {
        ret = proc.SingleRole(ctx, runType, id, gpu, shm)
    } else if role == master {
        defer dump(util.LogFile + "_dump_" + time.Now().Format("20060102150405"))
        setParamters()
        ret = proc.MasterRole(ctx)
    } else if role == slave {
@@ -164,3 +170,26 @@
    gosdk.Free()
    logo.Close()
}
func dump(dumpFile string) {
    dumpErr := recover()
    if dumpErr == nil {
        return
    }
    f, err := os.Create(dumpFile)
    if err != nil {
        return
    }
    f.WriteString(fmt.Sprintf("panic:\r\n%v", dumpErr))
    f.WriteString("\r\n\nstack:\r\n")
    f.WriteString(string(debug.Stack()))
    f.Close()
    //////////////////////////////////////////////
    // restart master
    cmd := exec.Command(os.Args[0], os.Args[1:]...)
    cmd.Stdout = os.Stdout
    cmd.Stderr = os.Stderr
    cmd.Start()
}
proc/reaper.go
@@ -47,6 +47,8 @@
    pid := -1
    cmd.Stdout = os.Stdout
    cmd.Stderr = os.Stderr
    cmd.SysProcAttr = &syscall.SysProcAttr{Pdeathsig: syscall.SIGTERM}
    err := cmd.Start()
    if err == nil {
        pid = cmd.Process.Pid