From 32a2005f6d146581775ef08e7863421db5ee38ab Mon Sep 17 00:00:00 2001
From: shikbupt <shikbupt@gmail.com>
Date: Fri, 10 Jan 2020 22:25:28 +0800
Subject: [PATCH] add option for web service signal handler (#1091)

---
 web/options.go | 12 ++++++++++++
 web/service.go |  4 +++-
 2 files changed, 15 insertions(+), 1 deletion(-)

diff --git a/web/options.go b/web/options.go
index 03e23484..0570f7ba 100644
--- a/web/options.go
+++ b/web/options.go
@@ -46,6 +46,8 @@ type Options struct {
 
 	// Static directory
 	StaticDir string
+
+	Signal bool
 }
 
 func newOptions(opts ...Option) Options {
@@ -59,6 +61,7 @@ func newOptions(opts ...Option) Options {
 		StaticDir:        DefaultStaticDir,
 		Service:          micro.NewService(),
 		Context:          context.TODO(),
+		Signal:           true,
 	}
 
 	for _, o := range opts {
@@ -242,3 +245,12 @@ func RegisterCheck(fn func(context.Context) error) Option {
 		o.RegisterCheck = fn
 	}
 }
+
+// HandleSignal toggles automatic installation of the signal handler that
+// traps TERM, INT, and QUIT.  Users of this feature to disable the signal
+// handler, should control liveness of the service through the context.
+func HandleSignal(b bool) Option {
+	return func(o *Options) {
+		o.Signal = b
+	}
+}
diff --git a/web/service.go b/web/service.go
index e9d6801b..b76b13b9 100644
--- a/web/service.go
+++ b/web/service.go
@@ -383,7 +383,9 @@ func (s *service) Run() error {
 	go s.run(ex)
 
 	ch := make(chan os.Signal, 1)
-	signal.Notify(ch, syscall.SIGTERM, syscall.SIGINT)
+	if s.opts.Signal {
+		signal.Notify(ch, syscall.SIGTERM, syscall.SIGINT)
+	}
 
 	select {
 	// wait on kill signal