go-signal
고언어에서 os signal 을 콘트롤 하는 방법을 찾아보았다.
package main
import (
"fmt"
"os"
"os/signal"
"syscall"
"time"
)
func main() {
// signal 채널을 만든다.
signal_chan := make(chan os.Signal, 2)
signal.Notify(signal_chan, syscall.SIGINT) // ctrl+c
// loop
isDone := false
for isDone != true {
// signal handler
select {
case sig := <-signal_chan:
fmt.Println("signal!! ", sig)
isDone = true
default:
isDone = false
}
time.Sleep(1)
}
}
채널을 통해서 signal을 전달하게 된다. 버퍼드채널과 select 를 이용하여 non-blocking 으로 구현하였다