diff --git a/main.go b/main.go index f056ebb..422ecbe 100644 --- a/main.go +++ b/main.go @@ -4,7 +4,6 @@ import ( // "flag" "os" "os/exec" - "os/signal" "runtime" // "runtime/pprof" "sync" @@ -17,29 +16,6 @@ var ( relaunch bool ) -func sigHandler() { - // TODO On Windows, these signals will not be triggered on closing cmd - // window. How to detect this? - sigChan := make(chan os.Signal, 1) - signal.Notify(sigChan, syscall.SIGINT, syscall.SIGTERM, syscall.SIGUSR1) - - for sig := range sigChan { - // May handle other signals in the future. - info.Printf("%v caught, exit\n", sig) - storeSiteStat(siteStatExit) - if sig == syscall.SIGUSR1 { - relaunch = true - } - close(quit) - break - } - /* - if *cpuprofile != "" { - pprof.StopCPUProfile() - } - */ -} - // This code is from goagain func lookPath() (argv0 string, err error) { argv0, err = exec.LookPath(os.Args[0]) diff --git a/main_unix.go b/main_unix.go new file mode 100644 index 0000000..bd780bd --- /dev/null +++ b/main_unix.go @@ -0,0 +1,30 @@ +// +build darwin freebsd linux netbsd openbsd + +package main + +import ( + "os" + "os/signal" + "syscall" +) + +func sigHandler() { + sigChan := make(chan os.Signal, 1) + signal.Notify(sigChan, syscall.SIGINT, syscall.SIGTERM, syscall.SIGUSR1) + + for sig := range sigChan { + // May handle other signals in the future. + info.Printf("%v caught, exit\n", sig) + storeSiteStat(siteStatExit) + if sig == syscall.SIGUSR1 { + relaunch = true + } + close(quit) + break + } + /* + if *cpuprofile != "" { + pprof.StopCPUProfile() + } + */ +} diff --git a/main_windows.go b/main_windows.go new file mode 100644 index 0000000..cd8393e --- /dev/null +++ b/main_windows.go @@ -0,0 +1,33 @@ +package main + +import ( + "os" + "os/signal" + "syscall" +) + +func sigHandler() { + // TODO On Windows, these signals will not be triggered on closing cmd + // window. How to detect this? + sigChan := make(chan os.Signal, 1) + signal.Notify(sigChan, syscall.SIGINT, syscall.SIGTERM) + + for sig := range sigChan { + // May handle other signals in the future. + info.Printf("%v caught, exit\n", sig) + storeSiteStat(siteStatExit) + // Windows has no SIGUSR1 signal, so relaunching is not supported now. + /* + if sig == syscall.SIGUSR1 { + relaunch = true + } + */ + close(quit) + break + } + /* + if *cpuprofile != "" { + pprof.StopCPUProfile() + } + */ +}