Go服务添加守护进程及kill守护进程

Go服务添加守护进程及kill守护进程


1. 前言

最早开发服务功能时是将服务直接强制后台运行,然后添加shell脚本进行定时监控,最后发现可以添加守护进程和以及更强大的进程管理框架比如perp:https://blog.csdn.net/weixin_39510813/article/details/90706405
因此在开发Go服务后我们也需要添加守护进程或者通过进程管理框架进行进程管理,这里先介绍如何添加守护进程以及kill守护进程,等后面接触到一些框架后再介绍框架,框架对进程的管理应该也是基于这些基础的。

2. Go添加守护进程

守护进程简单理解就是一种特殊的运行于后台的进程,不同于普通的后台运行进程,一个守护进程的父进程是init进程,因为它真正的父进程在fork出子进程后就先于子进程exit退出了,所以它是一个由init继承的孤儿进程。也因此可以开机启动,异常退出后会被重新拉起。

代码:

package main

import (
    "fmt"
    "os"
    "os/signal"
    "path"
    "syscall"
)

func main() {
    if os.Getppid() != 1 {
        createLogFile := func(fileName string) (fd *os.File, err error) {
            dir := path.Dir(fileName)
            if _, err = os.Stat(dir); err != nil && os.IsNotExist(err) {
                if err = os.MkdirAll(dir, 0755); err != nil {
                    log.Error("Start-Daemon: create dir: %s failed, err is: %v", dir, err)
                    return
                }
            }

            if fd, err = os.Create(fileName); err != nil {
                log.Error("Start-Daemon: create log file: %s failed, err is: %v", fileName, err)
                return
            }

            return
        }

        logFd, err := createLogFile("./tsl_ser.log")
        if err != nil {
            return
        }
        defer logFd.Close()

        // start Daemon
        cmdName := os.Args[0]
        newProc, err := os.StartProcess(cmdName, os.Args, &os.ProcAttr{Files: []*os.File{logFd, logFd, logFd}})
        if err != nil {
            log.Error("Start-Deamon: start process: %s failed, err is: %v", cmdName, err)
            return
        }

        log.Info("Start-Deamon: run in daemon success, pid: %v", newProc.Pid)
        return
    }

    //todo:
    WSDiscovery()
    DevConfigService()

    select {}
}

3. 杀掉守护进程

通过ps查找进程pid,然后使用

kill -HUP pid

杀掉守护进程。

4. 查看进程

这个简单记录一下,可以通过

man ps

查看一下ps指令,我们可以看到简单的查看所有的进程信息的指令:

ps -e

然后我们通过grep名字来过滤:

ps -e | grep xxx

其中的xxx就是进程名字。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

昵称系统有问题

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值