1,go监听程序关闭

package main

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

func main() {
	// 创建一个通道来接收信号
	sigCh := make(chan os.Signal, 1)
	// 监听指定的信号
	signal.Notify(sigCh, syscall.SIGINT, syscall.SIGTERM)

	// 启动一个 goroutine 来处理接收到的信号
	go func() {
		// 等待信号
		sig := <-sigCh
		fmt.Printf("接收到信号:%v\n", sig)

		// 在这里执行程序关闭前的清理操作
		// 在这里编写你的程序逻辑
		fmt.Printf("关闭程序")
		// 退出程序
		os.Exit(0)
	}()
	for {
		fmt.Println("执行中")
		time.Sleep(3 * time.Second) // 阻塞程序 3 秒
	}

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

2,win下执行 go run xxx.go Ctrl+C退出关闭程序