signal_unix.go 876 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. // Copyright 2012 The Go Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style
  3. // license that can be found in the LICENSE file.
  4. // +build darwin dragonfly freebsd linux nacl netbsd openbsd solaris windows
  5. package signal
  6. import (
  7. "os"
  8. "syscall"
  9. )
  10. // In assembly.
  11. func signal_disable(uint32)
  12. func signal_enable(uint32)
  13. func signal_recv() uint32
  14. func loop() {
  15. for {
  16. process(syscall.Signal(signal_recv()))
  17. }
  18. }
  19. func init() {
  20. signal_enable(0) // first call - initialize
  21. go loop()
  22. }
  23. const (
  24. numSig = 65 // max across all systems
  25. )
  26. func signum(sig os.Signal) int {
  27. switch sig := sig.(type) {
  28. case syscall.Signal:
  29. i := int(sig)
  30. if i < 0 || i >= numSig {
  31. return -1
  32. }
  33. return i
  34. default:
  35. return -1
  36. }
  37. }
  38. func enableSignal(sig int) {
  39. signal_enable(uint32(sig))
  40. }
  41. func disableSignal(sig int) {
  42. signal_disable(uint32(sig))
  43. }