signal.go

signal handling example for golang

0

Votes

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)
}

Vote Here

You must earn at least 1 vote on your snippets to be allowed to vote

Terms Of Use

Privacy Policy

Featured snippets are MIT license

Gears & Masters

Advertise

DevOpsnipp.com © 2020

medium.png