Skip to content

Instantly share code, notes, and snippets.

@reiki4040
Created October 2, 2014 14:38
Show Gist options
  • Save reiki4040/be3705f307d3cd136e85 to your computer and use it in GitHub Desktop.
Save reiki4040/be3705f307d3cd136e85 to your computer and use it in GitHub Desktop.
signal handling example for golang
package main
import (
"fmt"
"os"
"os/signal"
"syscall"
)
func main() {
signal_chan := make(chan os.Signal, 1)
signal.Notify(signal_chan,
syscall.SIGHUP,
syscall.SIGINT,
syscall.SIGTERM,
syscall.SIGQUIT)
exit_chan := make(chan int)
go func() {
for {
s := <-signal_chan
switch s {
// kill -SIGHUP XXXX
case syscall.SIGHUP:
fmt.Println("hungup")
// kill -SIGINT XXXX or Ctrl+c
case syscall.SIGINT:
fmt.Println("Warikomi")
// kill -SIGTERM XXXX
case syscall.SIGTERM:
fmt.Println("force stop")
exit_chan <- 0
// kill -SIGQUIT XXXX
case syscall.SIGQUIT:
fmt.Println("stop and core dump")
exit_chan <- 0
default:
fmt.Println("Unknown signal.")
exit_chan <- 1
}
}
}()
code := <-exit_chan
os.Exit(code)
}
@ZZZeno
Copy link

ZZZeno commented Sep 21, 2020

Thanks, that fits for me

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment