將訊號分配給通道

通常情況下,當你的程式被作業系統告知停止並採取一些措施來保留狀態或清理應用程式時,你將有理由捕獲。為此,你可以使用標準庫中的 os/signal 包。下面是將所有訊號從系統分配到通道的簡單示例,然後是如何對這些訊號做出反應。

package main

import (
    "fmt"
    "os"
    "os/signal"
)

func main() {
    // create a channel for os.Signal
    sigChan := make(chan os.Signal)

    // assign all signal notifications to the channel 
    signal.Notify(sigChan)

    // blocks until you get a signal from the OS
    select {
    // when a signal is received
    case sig := <-sigChan:
        // print this line telling us which signal was seen
        fmt.Println("Received signal from OS:", sig)
    }
}

當你執行上述指令碼時,它將建立一個通道,然後阻塞,直到該通道收到訊號。

$ go run signals.go 
^CReceived signal from OS: interrupt

上面的^C 是傳送 SIGINT 訊號的鍵盤命令 CTRL+C