1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
|
/*
* Copyright (c) 2020. Ant Group. All rights reserved.
*
* SPDX-License-Identifier: Apache-2.0
*/
package signals
import (
"os"
"os/signal"
"sync"
"syscall"
)
var (
once sync.Once
stop chan struct{}
shutdownSignals = []os.Signal{os.Interrupt, syscall.SIGTERM}
)
func SetupSignalHandler() (stopCh <-chan struct{}) {
// make sure SetupSignalHandler will not call twice
once.Do(func() {
stop = make(chan struct{})
c := make(chan os.Signal, 2)
signal.Notify(c, shutdownSignals...)
go func() {
<-c
close(stop)
<-c
os.Exit(1)
}()
})
return stop
}
|