приложение еще может минуту висеть пока SIGINT дойдет....😞
func SessionCleanupTask() {
var quit = make(chan os.Signal)
signal.Notify(quit, syscall.SIGHUP, syscall.SIGINT, syscall.SIGTERM, syscall.SIGQUIT) // kbdloss,ctrl+c,terminate,quit
for {
select {
case <- quit:
return
default:
nextExecute := time.Now().Add(time.Minute)
time.Sleep(time.Until(nextExecute))
log.Println("peek: SessionCleanupTask")
}
}
}
func init() {
go SessionCleanupTask()
}
просто убрать секцию default либо сделать time.Sleep(10*time.Milisecond) Секция дефаулт нужна если бдействительно хотите ДОБАВИТЬ логику простоя! Если же тупое ожидание то делайте самым простым способом!
Читай из 2 каналов: Select{ Case <- quit: return Case <- time.After(time.Minute): Log.... } Писал с тлф, но идея понятна )
обычно этот канал делают буферизованным, чтобы не блокировать обработчик сигнала. Тогда он сможет записать сигнал вне зависимости от того, кто-то готов его сейчас вычитать или нет. Иначе он может заблокроваться на записи - неххорошо, Ось подумает, что ее игнорируют. var quit = make(chan os.Signal, 1) ^^^
Обсуждают сегодня