You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
46 lines
755 B
46 lines
755 B
package proc |
|
|
|
import ( |
|
"git.diulo.com/mogfee/kit/logx" |
|
"os" |
|
"os/signal" |
|
"syscall" |
|
) |
|
|
|
const timeFormat = "0102150405" |
|
|
|
var done = make(chan struct{}) |
|
|
|
func init() { |
|
go func() { |
|
var profiler Stopper |
|
|
|
signals := make(chan os.Signal, 1) |
|
signal.Notify(signals, syscall.SIGUSR1, syscall.SIGUSR2, syscall.SIGTERM) |
|
for { |
|
v := <-signals |
|
switch v { |
|
case syscall.SIGUSR1: |
|
dumpGoroutines() |
|
case syscall.SIGUSR2: |
|
if profiler == nil { |
|
profiler = StartProfile() |
|
} else { |
|
profiler.Stop() |
|
profiler = nil |
|
} |
|
case syscall.SIGTERM: |
|
select { |
|
case <-done: |
|
default: |
|
close(done) |
|
} |
|
default: |
|
logx.Error("Got unregistered signal:", v) |
|
} |
|
} |
|
}() |
|
} |
|
func Done() <-chan struct{} { |
|
return done |
|
}
|
|
|