进程被kill,如何保证所有goroutine顺利退出

如果你想确保一个Go程序在进程被终止时所有的goroutine都能够顺利退出,你可以使用Go语言提供的sync.WaitGroup类型来实现这个功能。

首先,在你的程序中创建一个WaitGroup变量,然后在启动新的goroutine时,调用WaitGroupAdd方法来增加goroutine的计数器。每个goroutine在结束时,应该调用WaitGroupDone方法来减少计数器的值。最后,在主程序中,调用WaitGroupWait方法来阻塞主线程,直到所有的goroutine都结束为止。

下面是一个例子:

var wg sync.WaitGroup

// 在启动新的goroutine时,调用WaitGroup的Add方法来增加goroutine的计数器
wg.Add(1)
go func() {
    // 在goroutine结束时,调用WaitGroup的Done方法来减少计数器的值
    defer wg.Done()

    // goroutine代码
}()

// 在主程序中,调用WaitGroup的Wait方法来阻塞主线程,直到所有的goroutine都结束
wg.Wait()

这样,当主程序退出时,所有的goroutine都会被终止,并且在主程序退出之前,所有的goroutine都已经结束。