signal_windows.go 757 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. // +build windows
  2. package prompt
  3. import (
  4. "os"
  5. "os/signal"
  6. "syscall"
  7. "github.com/c-bata/go-prompt/internal/debug"
  8. )
  9. func (p *Prompt) handleSignals(exitCh chan int, winSizeCh chan *WinSize, stop chan struct{}) {
  10. sigCh := make(chan os.Signal, 1)
  11. signal.Notify(
  12. sigCh,
  13. syscall.SIGINT,
  14. syscall.SIGTERM,
  15. syscall.SIGQUIT,
  16. )
  17. for {
  18. select {
  19. case <-stop:
  20. debug.Log("stop handleSignals")
  21. return
  22. case s := <-sigCh:
  23. switch s {
  24. case syscall.SIGINT: // kill -SIGINT XXXX or Ctrl+c
  25. debug.Log("Catch SIGINT")
  26. exitCh <- 0
  27. case syscall.SIGTERM: // kill -SIGTERM XXXX
  28. debug.Log("Catch SIGTERM")
  29. exitCh <- 1
  30. case syscall.SIGQUIT: // kill -SIGQUIT XXXX
  31. debug.Log("Catch SIGQUIT")
  32. exitCh <- 0
  33. }
  34. }
  35. }
  36. }