阅读量:0
在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,使程序保持运行状态,直到接收到信号。