add: signal退出带context

This commit is contained in:
洪晓威 2022-01-19 12:26:38 +08:00
parent 63f6788a12
commit a64a2dc434

View File

@ -0,0 +1,30 @@
package main
import (
"context"
"log"
"os"
"os/signal"
"syscall"
"time"
)
func main() {
ctx, cancelFunc := context.WithTimeout(context.Background(), time.Second*2)
waitForFinish(ctx, cancelFunc)
}
//waitForFinish 带context的退出
func waitForFinish(ctx context.Context, cancel context.CancelFunc) {
log.Println("waiting for finish...")
sigChan := make(chan os.Signal, 1)
signal.Notify(sigChan, syscall.SIGINT, syscall.SIGTERM, syscall.SIGQUIT)
select {
case <-ctx.Done():
log.Println("ctx done")
break
case <-sigChan:
log.Println("got termination signal,canceling execution...")
cancel()
}
}