语境
有一个应用程序在 docker 集装箱内运行.当发送docker stop %container_id%
时,容器接收SIGTERM
.此信号在Golang应用程序中通过在退出前执行清理代码来处理.在本例中,代码是退出前的单个日志(log)语句.
问题
- 能保证容器在执行此语句之前不会停止存在吗?
- 如果是,它是否适用于其他信号?
- 如果不是,是否有适用于此的信号?
func main() {
http.HandleFunc("/", func(rw http.ResponseWriter, r *http.Request) {
fmt.Fprintln(rw, "chirtkem mudila")
})
go func() {
if err := http.ListenAndServe(":8080", nil); err != nil {
log.Fatal(err)
}
}()
interupt := make(chan os.Signal, 1)
signal.Notify(interupt, syscall.SIGTERM, syscall.SIGINT)
<-interupt
log.Println("graceful shutdown") // is it guaranteed to execute before container ceases to exist?
}