Go SIGINT(终端中断信号)和 SIGTERM(终止信号)signal.Notify 通知信号函数

Go SIGINT(终端中断信号)和 SIGTERM(终止信号)signal.Notify 通知信号函数

signal.Notify 是 Go 语言中用于通知信号的函数。在这个特定的例子中,它的作用是捕获 SIGINT(终端中断信号)和 SIGTERM(终止信号)这两个系统信号。

signal.Notify 函数接受一个信号通道和一个或多个要捕获的信号作为参数。在你的代码中,interrupt 是一个用于接收信号的通道。

当程序运行时,如果操作系统向该程序发送 SIGINT 或 SIGTERM 信号,signal.Notify 将会将这些信号发送到 interrupt 通道。你可以在代码的其他地方监听该通道,以便在接收到这些信号时执行一些特定的逻辑,比如进行清理操作或优雅地终止程序运行。

下面是一个简单的例子,展示了如何使用 signal.Notify 和 interrupt 通道来捕获和处理这些信号:

package main

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

func main() {
	interrupt := make(chan os.Signal, 1)
	signal.Notify(interrupt, syscall.SIGINT, syscall.SIGTERM)

	// 在另一个 goroutine 中监听信号通道
	go func() {
		sig := <-interrupt
		fmt.Println("接收到信号:", sig)
		// 执行一些清理操作或其他逻辑
		// ...
		os.Exit(0) // 优雅地终止程序
	}()

	// 这里可以写你的程序主逻辑
	// ...

	// 阻塞主 goroutine,使程序保持运行状态
	select {}
}

以上代码创建了一个信号通道 interrupt,并将 SIGINT 和 SIGTERM 这两个信号注册到该通道中。

然后,在另一个 goroutine 中,通过从 interrupt 通道接收信号,来处理这些信号。

程序的主逻辑可以写在注释部分的位置。

要测试这个示例,你可以按照以下步骤进行:

1 将示例代码保存到一个名为 main.go 的文件中。
2 打开终端,并导航到包含 main.go 文件的目录。
3 使用以下命令来构建并运行程序:

go run main.go

这将编译并运行 Go 程序。

4 在程序运行时,你可以按下 Ctrl+C 来发送 SIGINT 信号,或者使用操作系统的终止命令来发送 SIGTERM 信号。

5 在终端中,你会看到打印出的消息,确认程序接收到了信号并执行了相应的逻辑。

6 如果一切顺利,你会看到程序优雅地终止。

请注意,示例中的 select {} 用于阻塞主 goroutine,以保持程序运行状态。你可以根据实际需求来修改这部分逻辑,例如添加其他的处理逻辑或条件判断。

PS E:\TEXT\test> go run .\test.go
接收到信号: interrupt
PS E:\TEXT\test> 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

知其黑、受其白

喝个咖啡

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值