diff --git a/daemonize.go b/daemonize.go index 56423f5..5bfed7d 100644 --- a/daemonize.go +++ b/daemonize.go @@ -21,7 +21,7 @@ func exitOnUsr1() { // forkChild - execute ourselves once again, this time with the "-f" flag, and // wait for SIGUSR1 or child exit. // This is a workaround for the missing true fork function in Go. -func forkChild() { +func forkChild() int { go exitOnUsr1() name := os.Args[0] newArgs := []string{"-f", fmt.Sprintf("-notifypid=%d", os.Getpid())} @@ -33,7 +33,7 @@ func forkChild() { err := c.Start() if err != nil { tlog.Fatal.Printf("forkChild: starting %s failed: %v\n", name, err) - os.Exit(1) + return 1 } err = c.Wait() if err != nil { @@ -43,8 +43,8 @@ func forkChild() { } } tlog.Fatal.Printf("forkChild: wait returned an unknown error: %v\n", err) - os.Exit(1) + return 1 } // The child exited with 0 - let's do the same. - os.Exit(0) + return 0 } diff --git a/main.go b/main.go index 9034e3f..7a29e68 100644 --- a/main.go +++ b/main.go @@ -159,9 +159,11 @@ func main() { args := parseCliArgs() - // Fork a child into the background if "-f" is not set AND we are mounting a filesystem + // Fork a child into the background if "-f" is not set AND we are mounting + // a filesystem. The child will do all the work. if !args.foreground && flagSet.NArg() == 2 { - forkChild() // does not return + ret := forkChild() + os.Exit(ret) } if args.debug { tlog.Debug.Enabled = true