清華尹成帶你實戰GO案例(61)Go 訊號處理
Go 訊號處理
有的時候我們希望Go能夠智慧地處理Unix訊號。例如我們希望一個server接收到一個SIGTERM的訊號
時,能夠自動地停止;或者一個命令列工具接收到一個SIGINT訊號時,能夠停止接收輸入。現在我們來看
下如何使用channel來處理訊號。
當執行程式的時候,程式將阻塞等待訊號的到來,我們可以使用 CTRL+C 來傳送一個 SIGINT 訊號,這樣
程式就會輸出interrupt後退出。
awaiting signal
interrupt
有的時候我們希望Go能夠智慧地處理Unix訊號。例如我們希望一個server接收到一個SIGTERM的訊號
時,能夠自動地停止;或者一個命令列工具接收到一個SIGINT訊號時,能夠停止接收輸入。現在我們來看
下如何使用channel來處理訊號。
package main
import "fmt"
import "os"
import "os/signal"
import "syscall"
func main() {
// Go訊號通知通過向一個channel傳送``os.Signal`來實現。
// 我們將建立一個channel來接受這些通知,同時我們還用
// 一個channel來在程式可以退出的時候通知我們
sigs := make(chan os.Signal, 1)
done := make(chan bool, 1)
// `signal.Notify`在給定的channel上面註冊該channel
// 可以接受的訊號
signal.Notify(sigs, syscall.SIGINT, syscall.SIGTERM)
// 這個goroutine阻塞等待訊號的到來,當訊號到來的時候,
// 輸出該訊號,然後通知程式可以結束了
go func() {
sig := <-sigs
fmt.Println()
fmt.Println(sig)
done <- true
}()
// 程式將等待接受訊號,然後退出
fmt.Println("awaiting signal")
<-done
fmt.Println("exiting")
}
當執行程式的時候,程式將阻塞等待訊號的到來,我們可以使用 CTRL+C 來傳送一個 SIGINT 訊號,這樣
程式就會輸出interrupt後退出。
awaiting signal
interrupt
exiting
網址:http://www.qukuailianxueyuan.io/
欲領取造幣技術與全套虛擬機器資料
區塊鏈技術交流QQ群:756146052 備註:CSDN
尹成學院微信:備註:CSDN
網址:http://www.qukuailianxueyuan.io/
欲領取造幣技術與全套虛擬機器資料
區塊鏈技術交流QQ群:756146052 備註:CSDN
尹成學院微信:備註:CSDN
相關文章
- 清華尹成帶你實戰GO案例(24)Go 錯誤處理Go
- 清華尹成帶你實戰GO案例(22)Go常量Go
- 清華尹成帶你實戰GO案例(28)Go 方法Go
- 清華尹成帶你實戰GO案例(35)Go 互斥Go
- 清華尹成帶你實戰GO案例(38)Go 介面Go
- 清華尹成帶你實戰GO案例(46)Go 排序Go排序
- 清華尹成帶你實戰GO案例(47)Go 切片Go
- 清華尹成帶你實戰GO案例(2) Go 字典Go
- 清華尹成帶你實戰GO案例(7)Go DeferGo
- 清華尹成帶你實戰GO案例(7)Go ExitGo
- 清華尹成帶你實戰GO案例(12)Go PanicGo
- 清華尹成帶你實戰GO案例(48)Go 請求處理頻率控制Go
- 清華尹成帶你實戰GO案例(19)Go變數Go變數
- 清華尹成帶你實戰GO案例(23)Go 超時Go
- 清華尹成帶你實戰GO案例(29)Go 工作池Go
- 清華尹成帶你實戰GO案例(37)Go 集合功能Go
- 清華尹成帶你實戰GO案例(49)Go 時間Go
- 清華尹成帶你實戰GO案例(52)Go數值Go
- 清華尹成帶你實戰GO案例(54)Go 陣列Go陣列
- 清華尹成帶你實戰GO案例(57)Go通道方向Go
- 清華尹成帶你實戰GO案例(63)Go 指標Go指標
- 清華尹成帶你實戰GO案例(8)Go for迴圈Go
- 清華尹成帶你實戰GO案例(17) Go URL解析Go
- 清華尹成帶你實戰GO案例(20)Go 遍歷通道Go
- 清華尹成帶你實戰GO案例(25)Go 打點器Go
- 清華尹成帶你實戰GO案例(30)Go 關閉通道Go
- 清華尹成帶你實戰GO案例(39)Go 結構體Go結構體
- 清華尹成帶你實戰GO案例(40)Go 程式觸發Go
- 清華尹成帶你實戰GO案例(41)Go 程式執行Go
- 清華尹成帶你實戰GO案例(50)Go 時間戳Go時間戳
- 清華尹成帶你實戰GO案例(53)Go 數字解析Go
- 清華尹成帶你實戰GO案例(55)Go 隨機數Go隨機
- 清華尹成帶你實戰GO案例(58)Go通道緩衝Go
- 清華尹成帶你實戰GO案例(5)Go 自定義排序Go排序
- 清華尹成帶你實戰GO案例(10)Go JSON支援GoJSON
- 清華尹成帶你實戰GO案例(11)Go Line FiltersGoFilter
- 清華尹成帶你實戰GO案例(13)Go range函式Go函式
- 清華尹成帶你實戰GO案例(16)Go Switch語句Go