golang 中创建daemon的方法

https://github.com/takama/daemon

 

https://github.com/immortal/immortal/blob/master/fork.go                  这个是比较原始的最接近c语言的实现,它里面还有很多原始c语言的东西的golang实现:

// fork.go
package immortal import (
"os" "os/exec" "syscall" ) // Fork crete a new process func Fork() (int, error) { args := os.Args[1:] cmd := exec.Command(os.Args[0], args...) cmd.Env = os.Environ() cmd.Stdin = nil cmd.Stdout = nil cmd.Stderr = nil cmd.ExtraFiles = nil cmd.SysProcAttr = &syscall.SysProcAttr{ // Setsid is used to detach the process from the parent (normally a shell) // // The disowning of a child process is accomplished by executing the system call // setpgrp() or setsid(), (both of which have the same functionality) as soon as // the child is forked. These calls create a new process session group, make the // child process the session leader, and set the process group ID to the process // ID of the child. https://bsdmag.org/unix-kernel-system-calls/ Setsid: true, } if err := cmd.Start(); err != nil { return 0, err } return cmd.Process.Pid, nil }

 

posted @ 2018-06-13 15:25  微信公众号--共鸣圈  阅读(1342)  评论(0编辑  收藏  举报