go-prompt/signal_posix.go

50 lines
881 B
Go
Raw Normal View History

2017-08-16 03:22:38 +00:00
// +build !windows
package prompt
import (
"os"
"os/signal"
"syscall"
2018-12-09 17:33:29 +00:00
"github.com/c-bata/go-prompt/internal/debug"
2017-08-16 03:22:38 +00:00
)
func (p *Prompt) handleSignals(exitCh chan int, winSizeCh chan *WinSize, stop chan struct{}) {
in := p.in
sigCh := make(chan os.Signal, 1)
signal.Notify(
sigCh,
syscall.SIGINT,
syscall.SIGTERM,
syscall.SIGQUIT,
syscall.SIGWINCH,
)
for {
select {
case <-stop:
2018-12-09 17:33:29 +00:00
debug.Log("stop handleSignals")
2017-08-16 03:22:38 +00:00
return
case s := <-sigCh:
switch s {
case syscall.SIGINT: // kill -SIGINT XXXX or Ctrl+c
2018-12-09 17:33:29 +00:00
debug.Log("Catch SIGINT")
2017-08-16 03:22:38 +00:00
exitCh <- 0
case syscall.SIGTERM: // kill -SIGTERM XXXX
2018-12-09 17:33:29 +00:00
debug.Log("Catch SIGTERM")
2017-08-16 03:22:38 +00:00
exitCh <- 1
case syscall.SIGQUIT: // kill -SIGQUIT XXXX
2018-12-09 17:33:29 +00:00
debug.Log("Catch SIGQUIT")
2017-08-16 03:22:38 +00:00
exitCh <- 0
case syscall.SIGWINCH:
2018-12-09 17:33:29 +00:00
debug.Log("Catch SIGWINCH")
2017-08-16 03:22:38 +00:00
winSizeCh <- in.GetWinSize()
}
}
}
}