package core import ( "os" "os/signal" "syscall" "git.espin.casa/albert/go-telecom/internal/trace" "github.com/spf13/cobra" ) func Run(cmd *cobra.Command, args []string) { tp, err := trace.InitTrace() if err != nil { panic(err) } defer func() { if err := tp.Shutdown(cmd.Context()); err != nil { panic(err) } }() // wait signal to finish signal := WaitSignal() switch signal { case syscall.SIGINT: cmd.Println("Received SIGINT, shutting down...") case syscall.SIGQUIT: cmd.Println("Received SIGQUIT, shutting down...") case syscall.SIGTERM: cmd.Println("Received SIGTERM, shutting down...") default: cmd.Println("Received unknown signal, shutting down...") } } // WaitSignal catching exit signal func WaitSignal() os.Signal { ch := make(chan os.Signal, 2) signal.Notify( ch, syscall.SIGINT, syscall.SIGQUIT, syscall.SIGTERM, ) for { sig := <-ch switch sig { case syscall.SIGINT, syscall.SIGQUIT, syscall.SIGTERM: return sig } } }