github.com/yasker/longhorn-engine@v0.0.0-20160621014712-6ed6cfca0729/app/shutdown.go (about)

     1  package app
     2  
     3  import (
     4  	"os"
     5  	"os/signal"
     6  	"syscall"
     7  )
     8  
     9  var (
    10  	hooks = []func(){}
    11  )
    12  
    13  func addShutdown(f func()) {
    14  	if len(hooks) == 0 {
    15  		registerShutdown()
    16  	}
    17  
    18  	hooks = append(hooks, f)
    19  }
    20  
    21  func registerShutdown() {
    22  	c := make(chan os.Signal, 1024)
    23  	signal.Notify(c, syscall.SIGINT, syscall.SIGTERM)
    24  	go func() {
    25  		for range c {
    26  			for _, hook := range hooks {
    27  				hook()
    28  			}
    29  			os.Exit(1)
    30  		}
    31  	}()
    32  }