From 0176d252352c6d0df7f5e2e67912b301eeec8195 Mon Sep 17 00:00:00 2001 From: Neil Alexander Date: Sun, 18 Feb 2018 21:16:47 +0000 Subject: [PATCH] Catch SIGTERM instead of (impossible to capture) SIGKILL, also capture Windows service termination --- yggdrasil.go | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/yggdrasil.go b/yggdrasil.go index 6211ad78..356e7bce 100644 --- a/yggdrasil.go +++ b/yggdrasil.go @@ -9,6 +9,7 @@ import "io/ioutil" import "net" import "os" import "os/signal" +import "syscall" import "time" import "regexp" @@ -21,7 +22,7 @@ import "golang.org/x/net/ipv6" import . "yggdrasil" -import _ "github.com/kardianos/minwinsvc" +import "github.com/kardianos/minwinsvc" /** * This is a very crude wrapper around src/yggdrasil @@ -306,7 +307,13 @@ func main() { } // Catch interrupt to exit gracefully c := make(chan os.Signal, 1) - signal.Notify(c, os.Interrupt, os.Kill) + signal.Notify(c, os.Interrupt, syscall.SIGTERM) + // Create a function to capture the service being stopped on Windows + winTerminate := func() { + c <- os.Interrupt + } + minwinsvc.SetOnExit(winTerminate) + // Wait for the terminate/interrupt signal <-c logger.Println("Stopping...") }