From b389d0eb9c390bd218198f5ddf11941765bc621d Mon Sep 17 00:00:00 2001 From: Sergey Krashevich Date: Thu, 6 Jun 2024 18:54:40 +0300 Subject: [PATCH] fix(app): handle daemon process correctly on Unix systems --- internal/app/app.go | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/internal/app/app.go b/internal/app/app.go index 1d63a2c8..ab4b6c94 100644 --- a/internal/app/app.go +++ b/internal/app/app.go @@ -7,6 +7,7 @@ import ( "os/exec" "runtime" "runtime/debug" + "syscall" ) var ( @@ -45,20 +46,23 @@ func Init() { os.Exit(0) } + if os.Getppid() == 1 || syscall.Getppid() == 1 { + daemon = false + } else { + parent, err := os.FindProcess(os.Getppid()) + if err != nil || parent.Pid < 1 { + daemon = false + } + } + if daemon { if runtime.GOOS == "windows" { fmt.Println("Daemon not supported on Windows") os.Exit(1) } - args := os.Args[1:] - for i, arg := range args { - if arg == "-daemon" || arg == "-d" { - args[i] = "" - } - } // Re-run the program in background and exit - cmd := exec.Command(os.Args[0], args...) + cmd := exec.Command(os.Args[0], os.Args[1:]...) if err := cmd.Start(); err != nil { fmt.Println(err) os.Exit(1)