日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

sigterm信号_Golang之信号处理(Signal)

發(fā)布時間:2025/3/13 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 sigterm信号_Golang之信号处理(Signal) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

1、使用場景

實際項目中,我們希望修改了配置文件后,但又不想通過重啟進程讓它重新加載配置文件,可以使用signal的方式進行信號傳遞,或者我們希望通過信號控制,實現(xiàn)一種優(yōu)雅的退出方式。Golang為我們提供了signal包,實現(xiàn)信號處理機制,允許Go 程序與傳入的信號進行交互。

2、常用的Term信號

3、簡單的栗子

package mainimport ("fmt""os""os/signal" )func main() {c := make(chan os.Signal)signal.Notify(c)fmt.Println("start..")s := <-cfmt.Println("End...", s) }

(1)傳遞SIGINT信號

[homework@xxxxx signal]$ go run monitor.go start..#此時,CTL+C發(fā)送一個SIGINT信號量,得到輸出為: [homework@xxxxx signal]$ go run monitor.go start.. ^CEnd... interrupt

(2)傳遞SIGTERM信號

打開2個Term窗口
第一個運行g(shù)o run monitor.go程序
第二個執(zhí)行:ps -ef | grep monitor.go | grep grep -v | awk '{print $2}' | xargs kill #此時,kill命令發(fā)送一個SIGTERM信號量,得到輸出為: [homework@xxxxx signal]$ go run monitor.go start.. Terminated

4、優(yōu)雅的退出守護進程

(1)何為優(yōu)雅(graceful)?

Linux Server端的應(yīng)用程序經(jīng)常會長時間運行,在運行過程中,可能申請了很多系統(tǒng)資源,也可能保存了很多狀態(tài)。

在這些場景下,我們希望進程在退出前,可以釋放資源或?qū)?dāng)前狀態(tài)dump到磁盤上或打印一些重要的日志,即希望進程優(yōu)雅退出。

(2)從對優(yōu)雅退出的理解不難看出:優(yōu)雅退出可以通過捕獲SIGTERM來實現(xiàn)。

A、注冊SIGTERM信號的處理函數(shù)并在處理函數(shù)中做一些進程退出的準(zhǔn)備,信號處理函數(shù)的注冊sigaction()來實現(xiàn)。

B、在主進程的main()中,通過類似于while(!fQuit)的邏輯來檢測那個flag變量,一旦fQuit在signal handler function中被置為true,則主進程退出while()循環(huán),接下來就是一些釋放資源或dump進程當(dāng)前狀態(tài)或記錄日志的動作,完成這些后,主進程退出。

栗子:優(yōu)雅退出go守護進程

package mainimport ("fmt""os""os/signal""syscall""time" )func main() {//創(chuàng)建監(jiān)聽退出chanc := make(chan os.Signal)//監(jiān)聽指定信號 ctrl+c killsignal.Notify(c, syscall.SIGHUP, syscall.SIGINT, syscall.SIGTERM, syscall.SIGQUIT, syscall.SIGUSR1, syscall.SIGUSR2)go func() {for s := range c {switch s {case syscall.SIGHUP, syscall.SIGINT, syscall.SIGTERM, syscall.SIGQUIT:fmt.Println("Program Exit...", s)GracefullExit()case syscall.SIGUSR1:fmt.Println("usr1 signal", s)case syscall.SIGUSR2:fmt.Println("usr2 signal", s)default:fmt.Println("other signal", s)}}}()fmt.Println("Program Start...")sum := 0for {sum++fmt.Println("sum:", sum)time.Sleep(time.Second)} }func GracefullExit() {fmt.Println("Start Exit...")fmt.Println("Execute Clean...")fmt.Println("End Exit...")os.Exit(0) }

執(zhí)行程序:

[homework@xxxx signal]$ go run monitor.go Program Start... sum: 1 sum: 2 sum: 3 sum: 4 sum: 5 sum: 6 ^CProgram Exit... interrupt Start Exit... Execute Clean... End Exit...

5、信號的訂閱

信號的訂閱是通過 channel實現(xiàn)的,每個os.Signal channel 都會收聽自己相應(yīng)的事件集。

關(guān)于Golang之信號處理的文章就寫到這里,Done!

總結(jié)

以上是生活随笔為你收集整理的sigterm信号_Golang之信号处理(Signal)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: av在线播放一区 | 亚洲网址 | 午夜专区 | 18女人毛片 | 视频丨9l丨白浆 | 久久成人久久爱 | 久草香蕉视频 | 嫩草午夜少妇在线影视 | 午夜免费在线 | 九色视频91| 日韩视频免费在线播放 | 亚洲欧美一 | 欧美激情视频在线观看 | 欧美日韩三级在线 | 中文字幕在线官网 | 伊人888| 狠狠撸视频| 色婷婷国产精品视频 | sese亚洲| 亚洲春色在线观看 | 五月天视频网站 | 九草视频在线 | 亚洲字幕成人中文在线观看 | 91色蝌蚪| 小泽玛利亚一区二区三区 | 欧美日韩在线视频免费播放 | 香蕉久久久久久久av网站 | 人人草人人插 | 国产一区二区三区电影在线观看 | 87福利视频 | 少妇一级淫片免费视频 | 日韩一级淫片 | 国产又粗又猛 | 日韩在线二区 | 国产婷婷一区二区三区久久 | 香蕉在线播放 | 亚洲88av| 四虎久久久 | 海角社区在线视频播放观看 | 亚洲精品免费在线视频 | av综合站| 视频区小说区 | 五月天婷婷丁香花 | 国产精品18久久久久久无码 | 荒野求生21天去码版网站 | av资源一区 | 亚洲一区电影在线观看 | 国产精品一级黄片 | 国产欧美123 | 亚洲av无码一区二区三区人 | 亚洲国产精品成人无久久精品 | 日韩三区在线观看 | 欧美老肥妇做爰bbww | 99精品在线视频观看 | www.亚洲黄色 | 一级a性色生活片久久无 | 青青青青青青青青草 | 国产视频在线观看视频 | 国产黄色网络 | 黄色二级视频 | 男性影院 | 色欲av无码一区二区三区 | 日本少妇喂奶 | 亚洲一区二区三区免费观看 | 亚洲福利专区 | 91无打码| 国产久视频| julia一区二区 | www.插插 | 国产免费片 | 午夜激情在线播放 | 欧美性猛交xxxx乱大交hd | 亚洲国产视频一区二区 | 久久久久人妻一区精品色欧美 | 亚洲精品成av人片天堂无码 | 国产精品腿扒开做爽爽爽挤奶网站 | 久久久久久久久久国产 | 黑人乱码一区二区三区av | 精品国产午夜 | 亚洲黄色av| 青草视频在线观看视频 | 国产欧美日韩在线视频 | 中文字幕伊人 | 国产日韩一级 | 久久一区二区三区四区 | 美女视频黄是免费 | caoporn视频在线观看 | 性网爆门事件集合av | 久久精品片 | 狼人综合网 | 国产日产久久高清欧美一区 | 亚洲最大激情网 | 精品国产制服丝袜高跟 | 中文字幕在线视频一区二区 | 中文字幕色网 | 久久久久国产精品视频 | 黄色网址大全免费 | 视频一区日韩 | 一二三区精品视频 |