| // 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. |
| |
| package signal |
| |
| import ( |
| "os" |
| "syscall" |
| ) |
| |
| var sigtab = make(map[os.Signal]int) |
| |
| // In sig.s; jumps to runtime. |
| func signal_disable(uint32) |
| func signal_enable(uint32) |
| func signal_ignore(uint32) |
| func signal_recv() string |
| |
| func init() { |
| signal_enable(0) // first call - initialize |
| go loop() |
| } |
| |
| func loop() { |
| for { |
| process(syscall.Note(signal_recv())) |
| } |
| } |
| |
| const numSig = 256 |
| |
| func signum(sig os.Signal) int { |
| switch sig := sig.(type) { |
| case syscall.Note: |
| n, ok := sigtab[sig] |
| if !ok { |
| n = len(sigtab) + 1 |
| if n > numSig { |
| return -1 |
| } |
| sigtab[sig] = n |
| } |
| return n |
| default: |
| return -1 |
| } |
| } |
| |
| func enableSignal(sig int) { |
| signal_enable(uint32(sig)) |
| } |
| |
| func disableSignal(sig int) { |
| signal_disable(uint32(sig)) |
| } |
| |
| func ignoreSignal(sig int) { |
| signal_ignore(uint32(sig)) |
| } |