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 *指令时,进程将直接退出,这时候通常是截获不到的。

参考