// +build !plan9 package command import ( "os" "os/signal" "syscall" ) func OnInterrupt(fn func()) { // deal with control+c,etc signalChan := make(chan os.Signal, 1) // controlling terminal close, daemon not exit signal.Ignore(syscall.SIGHUP) signal.Notify(signalChan, os.Interrupt, os.Kill, syscall.SIGALRM, // syscall.SIGHUP, syscall.SIGINT, syscall.SIGTERM, // syscall.SIGQUIT, ) go func() { for _ = range signalChan { fn() os.Exit(0) } }() }