你这个不用 golang 实现也行,看你的需求,其实你就是想实现一个进程管理工具。市面上类似的工具很多。

syscall.ForkExec()

将进程配置为 DAEMON 模式,即可以脱离主进程的控制。同时因为可以获取到 pid,通过给 pid 发信号控制进程的启动管理。

举个简单的例子,比如你要实现一个服务,名为 serviced。代码如下:

doSomething

重点在 main 函数中的 start,stop,也就是用来控制进程启动和停止的代码。一般这种场景都需要引入一个 pid 文件,保存当前服务的进程 id。

编译成功后,执行如下:

大概就是这样吧。

当然这里还有一些细节要考虑。如果代码运行不出来,记得 error 打印出来调试下。