-
Notifications
You must be signed in to change notification settings - Fork 0
/
main.go
47 lines (41 loc) · 748 Bytes
/
main.go
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
40
41
42
43
44
45
46
47
package main
import (
"log"
"os"
"os/signal"
"syscall"
"github.com/alipourhabibi/urlshortener/cmd"
)
func main() {
var state byte
const (
reconfigure byte = iota
waitForSignal
)
signalCh := make(chan os.Signal, 1)
for {
switch state {
case reconfigure:
state = waitForSignal
go func() {
// Entrypoint for application
cmd.Execute()
signalCh <- syscall.SIGQUIT
}()
case waitForSignal:
signal.Notify(signalCh,
syscall.SIGHUP,
syscall.SIGINT,
syscall.SIGTERM,
syscall.SIGQUIT)
sig := <-signalCh
log.Println("signal recieved: ", sig)
switch sig {
case syscall.SIGHUP:
state = reconfigure
case syscall.SIGQUIT, syscall.SIGINT, syscall.SIGTERM:
return
}
}
}
}