golangでコマンド作ってもctrl + cとかで止めたくなるじゃないですか.
ちょっと調べた.
package main import ( "fmt" "os" "os/signal" "syscall" ) func main() { sig_ch := make(chan os.Signal, 1) signal.Notify(sig_ch, os.Interrupt, syscall.SIGHUP, syscall.SIGINT, syscall.SIGTERM, syscall.SIGQUIT) exit_ch := make(chan int) go func() { for { s := <-sig_ch switch s { case os.Interrupt: // windowsはこれで頑張る fmt.Println("Interrupt") exit_ch <- 0 case syscall.SIGHUP: fmt.Println("SIGHUP") exit_ch <- 0 case syscall.SIGINT: fmt.Println("SIGINT") exit_ch <- 0 case syscall.SIGTERM: fmt.Println("SIGTERM") exit_ch <- 0 case syscall.SIGQUIT: fmt.Println("SIGQUIT") exit_ch <- 0 default: fmt.Println("Other") exit_ch <- 1 } } }() code := <-exit_ch os.Exit(code) }
Windowsはちょっと別枠ですが, ちゃんと取り扱えるのはいいですね.
余談ですが, Windows + msys2だとうまく動かないのでいい方法が知りたいです.