package main
import (
"fmt"
"os"
"os/signal"
"sync"
"syscall"
"time"
)
func main() {
c := make(chan os.Signal, 1) //创建一个接收信号量的管道
exitVar := false //定义一个变量来处理进程退出的问题
signal.Notify(c, os.Interrupt, syscall.SIGTERM, syscall.SIGHUP, syscall.SIGQUIT) //监听linux的信号
grp := sync.WaitGroup{}
for i := 0; i < 10; i++ {
grp.Add(1)
go HandleData(i, &grp, &exitVar) //处理业务的方法
}
//退出的时候,index变成false
sig := <-c
exitVar = true
fmt.Println("task is exit", sig)
grp.Wait()
}
func HandleData(num int, group *sync.WaitGroup, exit *bool) {
for {
if *exit {
break
}
//这里可以放一些任务
fmt.Println("我是处理任务协程:", num)
time.Sleep(1 * time.Second)
}
fmt.Println("收到退出信号处理退出逻辑")
group.Done()
}