golang程序如何优雅地退出
生活随笔
收集整理的這篇文章主要介紹了
golang程序如何优雅地退出
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
簡言
1. 程序退出時不應該是kill -9暴力地殺死程序
2. 監聽系統信號,進程收到指定信號(TERM,INTR等信號)后,做完善后工作,再退出程序是常規做法
3. golang語言監聽系統信號很簡潔,寥寥幾行代碼就可以很優雅地處理系統信號
4. kill -9 pid 觸發的SIGKILL信號無法被處理,因為進程已經被系統強制關閉了
示例
package main import ("fmt""os""os/signal""syscall""time" )func Logic() {for {time.Sleep(time.Second*2)fmt.Println("logic time=",time.Now().Unix())} } func main() {// 邏輯處理協程go Logic()// 監控兩個信號// TERM信號(kill + 進程號 觸發)// 中斷信號(ctrl + c 觸發)osc := make(chan os.Signal, 1)signal.Notify(osc,syscall.SIGTERM, syscall.SIGINT)s := <- oscfmt.Println("監聽到退出信號,s=",s)// 退出前的清理操作// clean()fmt.Println("main程序退出") }效果及講解1
啟動進程(go run命令啟動進程,幾秒后,用ps命令找到該進程,使用kill +進程號來發信號)
觸發kill命令時的操作
注意:我們發給的進程是 "/tmp/go-build625650565/b001/exe/main2"所屬的進程
不是"go run main2.go"所屬的進程,這個只是啟動程序時的命令進程,不是我們真正的運行程序
?
效果及講解2(啟動進程幾秒后,按下ctrl+c鍵即可觸發SIGINTR信號)
超強干貨來襲 云風專訪:近40年碼齡,通宵達旦的技術人生總結
以上是生活随笔為你收集整理的golang程序如何优雅地退出的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: redis管道的使用
- 下一篇: golang处理kill命令总结