go-prompt/signal_windows.go

46 lines
872 B
Go
Raw Normal View History

2017-08-16 03:22:38 +00:00
// +build windows
package prompt
import (
"log"
"os"
"os/signal"
"syscall"
)
func (p *Prompt) handleSignals(exitCh chan int, winSizeCh chan *WinSize, stop chan struct{}) {
sigCh := make(chan os.Signal, 1)
signal.Notify(
sigCh,
syscall.SIGINT,
syscall.SIGTERM,
syscall.SIGQUIT,
)
for {
2018-02-12 08:45:05 +00:00
select {
case <-stop:
log.Println("[INFO] stop handleSignals")
return
case s := <-sigCh:
switch s {
2017-08-16 03:22:38 +00:00
2018-02-12 08:45:05 +00:00
case syscall.SIGINT: // kill -SIGINT XXXX or Ctrl+c
log.Println("[SIGNAL] Catch SIGINT")
exitCh <- 0
2017-08-16 03:22:38 +00:00
2018-02-12 08:45:05 +00:00
case syscall.SIGTERM: // kill -SIGTERM XXXX
log.Println("[SIGNAL] Catch SIGTERM")
exitCh <- 1
case syscall.SIGQUIT: // kill -SIGQUIT XXXX
log.Println("[SIGNAL] Catch SIGQUIT")
exitCh <- 0
}
2018-02-20 13:40:16 +00:00
case w := <-p.in.(*WindowsParser).tty.SIGWINCH():
winSizeCh <- &WinSize{Row: uint16(w.H), Col: uint16(w.W)}
2017-08-16 03:22:38 +00:00
}
}
}