Golang 截获Ctrl+C以及Kill指令并执行清除工作
有什么办法可以知道用户按下了Ctrl+C来终止程序呢?
问题背景
有时候我们需要在程序退出前执行清理工作,比如把内存Cache里的数据写入数据库等。这时候,就需要能够截获Ctrl+C指令或者kill指令。
解决方法
// 执行清理工作 func cleanUp() { logs.Info("do cleaning up ...") storage.Flush() logs.Info("===== clean up done =====") }// 监听退出指令 func watch() { c := make(chan os.Signal) signal.Notify(c, os.Interrupt, syscall.SIGTERM, syscall.SIGINT, syscall.SIGKILL) // 其中 SIGKILL = kill -9 <pid> 可能无法截获 go func() { log.Info(“watching stop signals”) <-c logs.Info(“got SIGTERM signal, try clean up …”) cleanUp() logs.Info(”===== ready to exit on SIGTERM =====”)
os.Exit(1) }()}
func main() { watch()
// 启动 APP beego.Run()}
注意事项
使用*kill -9