| // Copyright 2012 The Go Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style |
| // license that can be found in the LICENSE file. |
| |
| // +build darwin dragonfly freebsd linux nacl netbsd openbsd solaris windows |
| |
| package signal |
| |
| import ( |
| "os" |
| "syscall" |
| ) |
| |
| // In assembly. |
| func signal_disable(uint32) |
| func signal_enable(uint32) |
| func signal_recv() uint32 |
| |
| func loop() { |
| for { |
| process(syscall.Signal(signal_recv())) |
| } |
| } |
| |
| func init() { |
| signal_enable(0) // first call - initialize |
| go loop() |
| } |
| |
| const ( |
| numSig = 65 // max across all systems |
| ) |
| |
| func signum(sig os.Signal) int { |
| switch sig := sig.(type) { |
| case syscall.Signal: |
| i := int(sig) |
| if i < 0 || i >= numSig { |
| return -1 |
| } |
| return i |
| default: |
| return -1 |
| } |
| } |
| |
| func enableSignal(sig int) { |
| signal_enable(uint32(sig)) |
| } |
| |
| func disableSignal(sig int) { |
| signal_disable(uint32(sig)) |
| } |