Go笔记 - 如何后台启动Go程序?

1,440 阅读1分钟

最近希望后台启动一个go程序,发现标准库中并没有提供直接的API。于是就写一个简单的后台启动功能。通过包装syscallsyscall.SYS_FORK系统调用,再按照Linux下后台程序的标准操作:设置sid,改变工作目录,关闭或重定向标准输入、输出、错误。代码就不贴了,完整代码在这里。

主要功能包括:

  • start: 启动程序,将pid写入/var/run/program_name.pid 文件
  • stop: 发送SIGINT信号给正在运行的程序,退出程序
  • restart: 重新启动程序
  • daemon: 以后台方式启动程序

下面看一个例子:

package main

import (
	"github.com/Heng30/svrctl"

	"time"
)

func main() {
	svrctl.Run()

	for true {
		time.Sleep(time.Second)
	}
}