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 5package signal 6 7import ( 8 "os" 9 "syscall" 10) 11 12var sigtab = make(map[os.Signal]int) 13 14// In sig.s; jumps to runtime. 15func signal_disable(uint32) 16func signal_enable(uint32) 17func signal_ignore(uint32) 18func signal_ignored(uint32) bool 19func signal_recv() string 20 21func init() { 22 signal_enable(0) // first call - initialize 23 24 watchSignalLoop = loop 25} 26 27func loop() { 28 for { 29 process(syscall.Note(signal_recv())) 30 } 31} 32 33const numSig = 256 34 35func signum(sig os.Signal) int { 36 switch sig := sig.(type) { 37 case syscall.Note: 38 n, ok := sigtab[sig] 39 if !ok { 40 n = len(sigtab) + 1 41 if n > numSig { 42 return -1 43 } 44 sigtab[sig] = n 45 } 46 return n 47 default: 48 return -1 49 } 50} 51 52func enableSignal(sig int) { 53 signal_enable(uint32(sig)) 54} 55 56func disableSignal(sig int) { 57 signal_disable(uint32(sig)) 58} 59 60func ignoreSignal(sig int) { 61 signal_ignore(uint32(sig)) 62} 63 64func signalIgnored(sig int) bool { 65 return signal_ignored(uint32(sig)) 66} 67