diff options
author | Mathias Hall-Andersen <mathias@hall-andersen.dk> | 2018-02-04 16:08:26 +0100 |
---|---|---|
committer | Mathias Hall-Andersen <mathias@hall-andersen.dk> | 2018-02-04 16:08:26 +0100 |
commit | a0f54cbe5ac2cd8b8296c2c57c30029dd349cff0 (patch) | |
tree | 64574090d79ff3899c5c18e5268e450028e4656b /daemon_linux.go | |
parent | 5871ec04deb8f4715cab37146940baa35c08cbee (diff) |
Align with go library layout
Diffstat (limited to 'daemon_linux.go')
-rw-r--r-- | daemon_linux.go | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/daemon_linux.go b/daemon_linux.go new file mode 100644 index 0000000..e1aaede --- /dev/null +++ b/daemon_linux.go @@ -0,0 +1,32 @@ +package main + +import ( + "os" + "os/exec" +) + +/* Daemonizes the process on linux + * + * This is done by spawning and releasing a copy with the --foreground flag + */ +func Daemonize(attr *os.ProcAttr) error { + // I would like to use os.Executable, + // however this means dropping support for Go <1.8 + path, err := exec.LookPath(os.Args[0]) + if err != nil { + return err + } + + argv := []string{os.Args[0], "--foreground"} + argv = append(argv, os.Args[1:]...) + process, err := os.StartProcess( + path, + argv, + attr, + ) + if err != nil { + return err + } + process.Release() + return nil +} |