今天學了一下golang處理系統訊號。
和在後台開發來說,應該是個很常規的操作。
先定義乙個通道 sigs ,用來和系統互動,系統把訊號存放在這個通道裡面,怎麼讓系統知道要存放到這個通道裡呢?呼叫系統函式:
signal.notify(sigs, syscall.sigint, syscall.sigterm)
後面兩個是我們定義的要捕獲的訊號。也就是說系統會將這兩種訊號捕獲給我們的程式,其他的訊號不會捕獲給我們,除非我們繼續註冊其他的訊號。
接下來,我們要開乙個goroutine專門用來等待系統給我們捕獲的訊號
go handlesigs()
在handlesigs()裡,如果系統沒有捕獲我們想要的訊號,這個goroutine會一直阻塞在讀通道sigs操作上。一旦捕獲到了,那麼handlesigs()會根據訊號型別分別進行相應的處理。這裡可以直接用switch結構,也可以用map[os.signal]func()把訊號處理函式註冊到這個map裡來,然後根據訊號型別呼叫註冊的處理函式。其實還可以抽象出乙個inte***ce,map[os.signal]sighandler。
詳細**如下:
var (
sigs chan os.signal
done chan bool
)func init()
func main()
func signaltest()
func handlesigs()
}func handlesigint()
func handleterm()
(全文完) 語言處理系統
人和計算機交流資訊使用的語言稱為計算機語言或稱程式語言。計算機語言通常分為機器語言 組合語言和高階語言三類。如果要在計算機上執行高階語言程式就必須配備程式語言翻譯程式 下簡稱翻譯程式 翻譯程式本身是一組程式,不同的高階語言都有相應的翻譯程式。翻譯的方法有兩種 一種稱為 解釋 早期的basic源程式的...
批處理系統
將一批作業時間裝入磁帶,然後由監督程式道磁帶上調入記憶體,每次只能調入乙個程式並執行的是單道批處理系統 每次可調入多個程式並分時執行的是多道批處理系統。批處理系統的主要缺點 無互動能力 因為作業事先裝入磁帶即外存了 多道批處理系統採用的技術是中斷技術和多道程式技術。單道程式系統 記憶體中只能存放一道...
流處理系統
上面提到了批處理系統其實並不適合流式資料處理,所以我們需要一些工具來處理流式資料,當然資料庫也可以完成這個任務,生產者傳送任務到資料庫中,消費者輪詢查詢,但是當資料多了以後顯然效率上是有問題的,所以這其實是需要某些通知機制或者更為高效的模型,如下 發布訂閱系統 生產者消費者直接通訊 訊息佇列 這裡其...