你这个不用 golang 实现也行,看你的需求,其实你就是想实现一个进程管理工具。市面上类似的工具很多。
syscall.ForkExec()将进程配置为 DAEMON 模式,即可以脱离主进程的控制。同时因为可以获取到 pid,通过给 pid 发信号控制进程的启动管理。
举个简单的例子,比如你要实现一个服务,名为 serviced。代码如下:
doSomething重点在 main 函数中的 start,stop,也就是用来控制进程启动和停止的代码。一般这种场景都需要引入一个 pid 文件,保存当前服务的进程 id。
编译成功后,执行如下:
大概就是这样吧。
当然这里还有一些细节要考虑。如果代码运行不出来,记得 error 打印出来调试下。