项目场景:

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)
        })
}