Browse Source

Fix go1.4.2 signal handling

pull/220/head
euforia 10 years ago
parent
commit
9f2ea93a7e
  1. 19
      go/weed/signal_handling.go

19
go/weed/signal_handling.go

@ -9,10 +9,13 @@ import (
) )
func OnInterrupt(fn func()) { func OnInterrupt(fn func()) {
// deal with control+c,etc
// Deal with control+c,etc
// Controlling terminal close, daemon not exit
ignoreChan := make(chan os.Signal, 1)
signal.Notify(ignoreChan, syscall.SIGHUP)
signalChan := make(chan os.Signal, 1) signalChan := make(chan os.Signal, 1)
// controlling terminal close, daemon not exit
signal.Ignore(syscall.SIGHUP)
signal.Notify(signalChan, signal.Notify(signalChan,
os.Interrupt, os.Interrupt,
os.Kill, os.Kill,
@ -21,10 +24,18 @@ func OnInterrupt(fn func()) {
syscall.SIGINT, syscall.SIGINT,
syscall.SIGTERM, syscall.SIGTERM,
syscall.SIGQUIT) syscall.SIGQUIT)
go func() { go func() {
for _ = range signalChan {
for {
select {
case <-signalChan:
fn() fn()
os.Exit(0) os.Exit(0)
case <-ignoreChan:
// Ignore
break
}
} }
}() }()
} }
Loading…
Cancel
Save