golang - 시그널 핸들링

Go에서는 아래처럼 시그널을 핸들링 할 수 있다.

package main

import (
    "fmt"
    "os"
    "os/signal"
    "syscall"
)

func main() {
    sig := make(chan os.Signal, 1)
    signal.Notify(sig,
        syscall.SIGKILL,
        syscall.SIGTERM,
        syscall.SIGINT)

    s := <- sig

    fmt.Println("signal: ", s)
}

syscall 패키지의 시그널은 linux/unix에 있는 개념이기 때문에 Windows 플랫폼에서의 CTRL^C 나 CTRL^BREAK 는 잡을 수 없다.
os.Interrupt로 CTRL^C 과 CTRL^BREAK를 잡기 위해 Windows에 대응하기 위해서는 아래처럼 한다.

package main

import (
    "fmt"
    "os"
    "os/signal"
    "syscall"
)

func main() {
    sig := make(chan os.Signal, 1)
    signal.Notify(sig,
        syscall.SIGKILL,
        syscall.SIGTERM,
        syscall.SIGINT,
        os.Interrupt)

    s := <- sig

    fmt.Println("signal: ", s)
}

이 글은 2019-09-28에 작성되었습니다.