go-prompt/signal_windows.go
2018-10-21 19:35:23 +09:00

47 lines
704 B
Go

// +build windows
package prompt
import (
"context"
"os"
"os/signal"
"syscall"
)
type SignalHandler struct {
SigWinch chan struct{}
}
func NewSignalHandler() *SignalHandler {
return &SignalHandler{}
}
func (sh *SignalHandler) Run(ctx context.Context, cancel context.CancelFunc) {
sigchan := make(chan os.Signal, 1)
signal.Notify(
sigchan,
syscall.SIGINT,
syscall.SIGTERM,
syscall.SIGQUIT,
)
for {
select {
case <-ctx.Done():
return
case s := <-sigchan:
switch s {
case syscall.SIGINT: // kill -SIGINT XXXX or Ctrl+c
cancel()
case syscall.SIGTERM: // kill -SIGTERM XXXX
cancel()
case syscall.SIGQUIT: // kill -SIGQUIT XXXX
cancel()
}
}
}
}