diff --git a/godrop.go b/godrop.go index 894cb23..f1cf20e 100644 --- a/godrop.go +++ b/godrop.go @@ -10,6 +10,7 @@ import ( "net" "os" "os/exec" + "os/signal" "syscall" ) @@ -86,12 +87,9 @@ func MultiDrop(c Config, f func() ([]net.Listener, error)) error { } if c.Foreground { - cmd.SysProcAttr.Setctty = true cmd.Stdin = os.Stdin cmd.Stdout = os.Stdout cmd.Stderr = os.Stderr - } else { - cmd.SysProcAttr.Noctty = true } if err := cmd.Start(); err != nil { @@ -99,6 +97,21 @@ func MultiDrop(c Config, f func() ([]net.Listener, error)) error { } if c.Foreground { + go func() { + term := make(chan os.Signal) + signal.Notify(term, syscall.SIGHUP, syscall.SIGINT, syscall.SIGTERM, syscall.SIGQUIT) + sigs := make(chan os.Signal) + signal.Notify(sigs, syscall.SIGSTOP, syscall.SIGCONT, syscall.SIGUSR1, syscall.SIGUSR2) + for { + select { + case sig := <-term: + cmd.Process.Signal(sig) + return + case sig := <-sigs: + cmd.Process.Signal(sig) + } + } + }() _ = cmd.Wait() os.Exit(int(cmd.ProcessState.Sys().(syscall.WaitStatus))) }