- golang版本:1.15.3
- os: Mac OS 10.15.7
在一个goroutine中使用for循环不断地检测一个os.Signal的channel,如果收到os.Interrupt或者os.Kill信号,则退出程序。如果没有,则执行select default中的语句。但当在终端中中止程序时,没有收到对应信号,无法停止。代码如下:
// 运行后会一直执行下去, 无法收到ch中的信号
func main() {
ch := make(chan os.Signal)
signal.Notify(ch, os.Interrupt, os.Kill)
go func() {
for {
select {
case s := <-ch:
fmt.Printf("收到停止信号: %v
", s)
os.Exit(0)
default:
time.Sleep(time.Second)
}
}
}()
for {
fmt.Println("正在运行")
time.Sleep(time.Second)
}
}
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…