가끔 우리는 Go 프로그램이 똑똑하게 Unix signal 을 처리해주길 바랍니다. 예를 들어, |
|
package main
|
|
import "fmt"
import "os"
import "os/signal"
import "syscall"
|
|
func main() {
|
|
Go의 signal 알림은 |
sigs := make(chan os.Signal, 1)
done := make(chan bool, 1)
|
|
signal.Notify(sigs, syscall.SIGINT, syscall.SIGTERM)
|
이 고루틴은 signal을 받기 위한 블로킹 고루틴입니다. Signal을 받으면 받은 signal을 출력하고 프로그램에 종료 가능하다고 알려줄 것입니다. |
go func() {
sig := <-sigs
fmt.Println()
fmt.Println(sig)
done <- true
}()
|
프로그램은 여기서 원하는 signal을 받을 때까지 기다릴 것입니다. (위의 고루틴이 signal을 받으면 |
fmt.Println("awaiting signal")
<-done
fmt.Println("exiting")
}
|
이 프로그램을 실행시키면 signal을 받을 때까지 블록될 것입니다. |
$ go run signals.go
awaiting signal
^C
interrupt
exiting
|
다음 예제: 종료.