-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy path64_signals.go
More file actions
39 lines (34 loc) · 1.25 KB
/
64_signals.go
File metadata and controls
39 lines (34 loc) · 1.25 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
package gobyexample
import (
"fmt"
"os"
"os/signal"
"syscall"
)
// SignalsDemo - Sometimes we'd like our Go programs to intelligently handle Unix signals.
// For example, we might want a server to gracefully shutdown when it receives a SIGTERM,
// or a command-line tool to stop processing input if it receives a SIGINT. Here's how to
// handle signals in Go with channels.
func SignalsDemo() {
// Go signal notification works by sending os.Signal values on a channel.
// We'll create a channel to receive these notifications, and also create another
// channel to notify us when the program can exit.
sigs := make(chan os.Signal, 1)
done := make(chan bool, 1)
// signal.Notify registers the given channel to receive notifications of the
// specified signals.
signal.Notify(sigs, syscall.SIGINT, syscall.SIGTERM)
// This goroutine executes a blocking receive for signals. When it gets one
// it'll print it out and then notify the program that it can finish.
go func() {
sig := <-sigs
fmt.Println()
fmt.Println(sig)
done <- true
}()
// The program will wait here until it gets the expected signal (as indicated
// by the goroutine above sending a value on `done`) and then exit.
fmt.Println("awaiting signal")
<-done
fmt.Println("exiting")
}