|  | // 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)) | 
|  | } |