go-daemon
A library for writing system daemons in golang
...We can not use fork syscall in Golang's runtime, because child process doesn't inherit threads and goroutines in that case. The library uses a simple trick: it runs its own copy with a mark - a predefined environment variable. Availability of the variable for the process means execution in the child's copy. So that if the mark is not set - the library executes the parent's operations and runs its own copy with the mark, and if the mark is set - the library executes the child's operations.