我的, 可以参考下.
打印出来记录log是最简单的.
// handleException :
func handleException() {
c := make(chan os.Signal)
signal.Notify(c, syscall.SIGABRT)
signal.Notify(c, syscall.SIGSTOP)
signal.Notify(c, syscall.SIGINT)
signal.Notify(c, syscall.SIGKILL)
signal.Notify(c, syscall.SIGSEGV)
signal.Notify(c, syscall.SIGQUIT)
signal.Notify(c, syscall.SIGTERM)
signal.Notify(c, syscall.Signal(30)) // custom signal
go func(c chan os.Signal) {
for {
sig := <-c
log.Println("get signal : ", sig)
buf := make([]byte, 1024*200)
cnt := runtime.Stack(buf, true)
buf = buf[:cnt]
log.Printf(`=== BEGIN goroutine stack dump ===
%s
=== END goroutine stack dump ===
`, string(buf))
switch sig {
case syscall.SIGTERM:
fallthrough
case syscall.SIGSTOP:
fallthrough
case syscall.SIGINT:
fallthrough
case syscall.SIGABRT:
fallthrough
case syscall.SIGKILL:
fallthrough
case syscall.SIGQUIT:
fallthrough
case syscall.SIGSEGV:
fallthrough
default:
log.Printf("got signal %v, exiting ...", sig)
}
}
}(c)
}
【 在 littleSram 的大作中提到: 】
: thx
: 麻烦问一下,生产环境也这样用吗?
--
FROM 117.176.242.*