在Go語言中,可以使用os/signal
包來處理進程信號。下面是一個處理 SIGINT
和 SIGTERM
信號的示例代碼:
package main
import (
"fmt"
"os"
"os/signal"
"syscall"
)
func main() {
// 創建一個接收信號的通道
sigCh := make(chan os.Signal, 1)
// 監聽 SIGINT 和 SIGTERM 信號
signal.Notify(sigCh, syscall.SIGINT, syscall.SIGTERM)
// 開啟一個 Goroutine 來等待信號
go func() {
// 通過通道接收信號
sig := <-sigCh
// 打印接收到的信號
fmt.Printf("Received signal: %s\n", sig)
// 執行清理操作,然后退出程序
// ...
os.Exit(0)
}()
// 主程序繼續執行其他操作
// ...
// 阻塞主 Goroutine,等待信號
select {}
}
在上面的示例代碼中,我們首先創建一個用于接收信號的通道sigCh
,然后使用signal.Notify
函數監聽SIGINT
和SIGTERM
信號,并將它們發送到sigCh
通道中。接下來,我們開啟一個單獨的Goroutine來等待信號,一旦接收到信號,就執行相應的操作(如打印接收到的信號、執行清理操作等),然后調用os.Exit(0)
退出程序。最后,我們使用select {}
來阻塞主Goroutine,使程序保持運行狀態,直到接收到信號。