优雅地关机或重启
kill -9 pid
信号

优雅地关机

什么是优雅关机?

Ctrl+C

如何实现优雅关机?

Go 1.8版本之后, http.Server 内置的 Shutdown() 方法就支持优雅地关机,具体示例如下:

如何验证优雅关机的效果呢?

8080/
Ctrl+Csyscall.SIGINT
127.0.0.1:8080/Ctrl+Csyscall.SIGINT

优雅地重启

优雅关机实现了,那么该如何实现优雅重启呢?

ListenAndServe

如何验证优雅重启的效果呢?

kill -1 pidsyscall.SIGINT
go build -o graceful_restart./graceful_restarthello gin!hello q1mi!go build -o graceful_restart127.0.0.1:8080/kill -1 43682syscall.SIGHUPhello gin!127.0.0.1:8080/hello q1mi!
endlessforksupervisor

总结

无论是优雅关机还是优雅重启归根结底都是通过监听特定系统信号,然后执行一定的逻辑处理保障当前系统正在处理的请求被正常处理后再关闭当前进程。使用优雅关机还是使用优雅重启以及怎么实现,这就需要根据项目实际情况来决定了。