fix #1176 grace support windows
Showing
1 changed file
with
22 additions
and
23 deletions
| ... | @@ -133,19 +133,13 @@ func NewServer(addr string, handler http.Handler) (srv *graceServer) { | ... | @@ -133,19 +133,13 @@ func NewServer(addr string, handler http.Handler) (srv *graceServer) { |
| 133 | SignalHooks: map[int]map[os.Signal][]func(){ | 133 | SignalHooks: map[int]map[os.Signal][]func(){ |
| 134 | PRE_SIGNAL: map[os.Signal][]func(){ | 134 | PRE_SIGNAL: map[os.Signal][]func(){ |
| 135 | syscall.SIGHUP: []func(){}, | 135 | syscall.SIGHUP: []func(){}, |
| 136 | syscall.SIGUSR1: []func(){}, | ||
| 137 | syscall.SIGUSR2: []func(){}, | ||
| 138 | syscall.SIGINT: []func(){}, | 136 | syscall.SIGINT: []func(){}, |
| 139 | syscall.SIGTERM: []func(){}, | 137 | syscall.SIGTERM: []func(){}, |
| 140 | syscall.SIGTSTP: []func(){}, | ||
| 141 | }, | 138 | }, |
| 142 | POST_SIGNAL: map[os.Signal][]func(){ | 139 | POST_SIGNAL: map[os.Signal][]func(){ |
| 143 | syscall.SIGHUP: []func(){}, | 140 | syscall.SIGHUP: []func(){}, |
| 144 | syscall.SIGUSR1: []func(){}, | ||
| 145 | syscall.SIGUSR2: []func(){}, | ||
| 146 | syscall.SIGINT: []func(){}, | 141 | syscall.SIGINT: []func(){}, |
| 147 | syscall.SIGTERM: []func(){}, | 142 | syscall.SIGTERM: []func(){}, |
| 148 | syscall.SIGTSTP: []func(){}, | ||
| 149 | }, | 143 | }, |
| 150 | }, | 144 | }, |
| 151 | state: STATE_INIT, | 145 | state: STATE_INIT, |
| ... | @@ -208,16 +202,24 @@ func (srv *graceServer) ListenAndServe() (err error) { | ... | @@ -208,16 +202,24 @@ func (srv *graceServer) ListenAndServe() (err error) { |
| 208 | l, err := srv.getListener(addr) | 202 | l, err := srv.getListener(addr) |
| 209 | if err != nil { | 203 | if err != nil { |
| 210 | log.Println(err) | 204 | log.Println(err) |
| 211 | return | 205 | return err |
| 212 | } | 206 | } |
| 213 | 207 | ||
| 214 | srv.GraceListener = newGraceListener(l, srv) | 208 | srv.GraceListener = newGraceListener(l, srv) |
| 215 | 209 | ||
| 216 | if srv.isChild { | 210 | if srv.isChild { |
| 217 | syscall.Kill(syscall.Getppid(), syscall.SIGTERM) | 211 | process, err := os.FindProcess(os.Getppid()) |
| 212 | if err != nil { | ||
| 213 | log.Println(err) | ||
| 214 | return err | ||
| 215 | } | ||
| 216 | err = process.Kill() | ||
| 217 | if err != nil { | ||
| 218 | return err | ||
| 219 | } | ||
| 218 | } | 220 | } |
| 219 | 221 | ||
| 220 | log.Println(syscall.Getpid(), srv.Addr) | 222 | log.Println(os.Getpid(), srv.Addr) |
| 221 | return srv.Serve() | 223 | return srv.Serve() |
| 222 | } | 224 | } |
| 223 | 225 | ||
| ... | @@ -255,17 +257,24 @@ func (srv *graceServer) ListenAndServeTLS(certFile, keyFile string) (err error) | ... | @@ -255,17 +257,24 @@ func (srv *graceServer) ListenAndServeTLS(certFile, keyFile string) (err error) |
| 255 | l, err := srv.getListener(addr) | 257 | l, err := srv.getListener(addr) |
| 256 | if err != nil { | 258 | if err != nil { |
| 257 | log.Println(err) | 259 | log.Println(err) |
| 258 | return | 260 | return err |
| 259 | } | 261 | } |
| 260 | 262 | ||
| 261 | srv.tlsInnerListener = newGraceListener(l, srv) | 263 | srv.tlsInnerListener = newGraceListener(l, srv) |
| 262 | srv.GraceListener = tls.NewListener(srv.tlsInnerListener, config) | 264 | srv.GraceListener = tls.NewListener(srv.tlsInnerListener, config) |
| 263 | 265 | ||
| 264 | if srv.isChild { | 266 | if srv.isChild { |
| 265 | syscall.Kill(syscall.Getppid(), syscall.SIGTERM) | 267 | process, err := os.FindProcess(os.Getppid()) |
| 268 | if err != nil { | ||
| 269 | log.Println(err) | ||
| 270 | return err | ||
| 266 | } | 271 | } |
| 267 | 272 | err = process.Kill() | |
| 268 | log.Println(syscall.Getpid(), srv.Addr) | 273 | if err != nil { |
| 274 | return err | ||
| 275 | } | ||
| 276 | } | ||
| 277 | log.Println(os.Getpid(), srv.Addr) | ||
| 269 | return srv.Serve() | 278 | return srv.Serve() |
| 270 | } | 279 | } |
| 271 | 280 | ||
| ... | @@ -303,11 +312,8 @@ func (srv *graceServer) handleSignals() { | ... | @@ -303,11 +312,8 @@ func (srv *graceServer) handleSignals() { |
| 303 | signal.Notify( | 312 | signal.Notify( |
| 304 | srv.sigChan, | 313 | srv.sigChan, |
| 305 | syscall.SIGHUP, | 314 | syscall.SIGHUP, |
| 306 | syscall.SIGUSR1, | ||
| 307 | syscall.SIGUSR2, | ||
| 308 | syscall.SIGINT, | 315 | syscall.SIGINT, |
| 309 | syscall.SIGTERM, | 316 | syscall.SIGTERM, |
| 310 | syscall.SIGTSTP, | ||
| 311 | ) | 317 | ) |
| 312 | 318 | ||
| 313 | pid := syscall.Getpid() | 319 | pid := syscall.Getpid() |
| ... | @@ -321,19 +327,12 @@ func (srv *graceServer) handleSignals() { | ... | @@ -321,19 +327,12 @@ func (srv *graceServer) handleSignals() { |
| 321 | if err != nil { | 327 | if err != nil { |
| 322 | log.Println("Fork err:", err) | 328 | log.Println("Fork err:", err) |
| 323 | } | 329 | } |
| 324 | case syscall.SIGUSR1: | ||
| 325 | log.Println(pid, "Received SIGUSR1.") | ||
| 326 | case syscall.SIGUSR2: | ||
| 327 | log.Println(pid, "Received SIGUSR2.") | ||
| 328 | srv.serverTimeout(0 * time.Second) | ||
| 329 | case syscall.SIGINT: | 330 | case syscall.SIGINT: |
| 330 | log.Println(pid, "Received SIGINT.") | 331 | log.Println(pid, "Received SIGINT.") |
| 331 | srv.shutdown() | 332 | srv.shutdown() |
| 332 | case syscall.SIGTERM: | 333 | case syscall.SIGTERM: |
| 333 | log.Println(pid, "Received SIGTERM.") | 334 | log.Println(pid, "Received SIGTERM.") |
| 334 | srv.shutdown() | 335 | srv.shutdown() |
| 335 | case syscall.SIGTSTP: | ||
| 336 | log.Println(pid, "Received SIGTSTP.") | ||
| 337 | default: | 336 | default: |
| 338 | log.Printf("Received %v: nothing i care about...\n", sig) | 337 | log.Printf("Received %v: nothing i care about...\n", sig) |
| 339 | } | 338 | } | ... | ... |
-
Please register or sign in to post a comment