feat(pidproxy): added signal handler

This commit is contained in:
Suyono 2023-12-12 00:29:32 +00:00
parent ad8499daa5
commit 8a85ad5107
2 changed files with 23 additions and 1 deletions

BIN
cmd/pidproxy/pidproxy Executable file

Binary file not shown.

View File

@ -4,6 +4,7 @@ import (
"log" "log"
"os" "os"
"os/exec" "os/exec"
"os/signal"
"strconv" "strconv"
"syscall" "syscall"
"time" "time"
@ -90,7 +91,16 @@ func pidProxy(cmd *cobra.Command, args []string) error {
var ( var (
err error err error
pid int pid int
sc chan os.Signal
t *time.Timer
) )
sc = make(chan os.Signal, 1)
signal.Notify(sc, unix.SIGTERM)
t = time.NewTimer(time.Second)
check:
for { for {
if pid, err = readPid(pidfile); err != nil { if pid, err = readPid(pidfile); err != nil {
return err return err
@ -100,8 +110,20 @@ func pidProxy(cmd *cobra.Command, args []string) error {
return err return err
} }
time.Sleep(time.Second) select {
case <-t.C:
case <-sc:
if pid, err = readPid(pidfile); err != nil {
return err
}
if err = unix.Kill(pid, unix.SIGTERM); err != nil {
return err
}
break check
}
} }
return nil
} }
func readPid(pidFile string) (int, error) { func readPid(pidFile string) (int, error) {