项目场景:
golang 使用signal信号进行协程优雅的退出
问题描述:
现需要为signal 进行单元测试
func main() {
sigs := make(chan os.Signal, 1)
signal.Notify(sigs, syscall.SIGINT, syscall.SIGTERM, syscall.SIGKILL, syscall.SIGQUIT)
// xxx 初始化
wg.Add(1)
for {
select {
case <-sigs:
cancel()
wg.Done()
goto Exit
}
}
Exit:
wg.Wait()
fmt.Println("Progress stop")
}
解决方案:
func TestSignal(t *testing.T) {
Convey("TestSignal", t, func() {
go main()
time.Sleep(1 * time.Second)
p, _ := os.FindProcess(os.Getpid())
_ = p.Signal(syscall.SIGINT)
})
}