处理所有信号
handleAll.go
第一部分代码如下:
handleAll.go
第二部分代码如下:
func main() {
sigs := make(chan os.Signal, 1)
signal.Notify(sigs)
所以,所有的魔法都在signal.Notify(sigs)
调用上。由于没有指定信号,所有输入信号都将被处理。
handleAll.go
第三部分代码如下:
使用其中一个信号退出程序非常方便。
这给了你在需要时在程序中做一些内务管理的机会。此时,信号被用于这个目的。但这并不妨碍你使用SIGKILL
来终止程序。
for {
time.Sleep(30 * time.Second)
}
}
你仍需要调用time.Sleep()
以阻止程序立即退出。
同样,最好使用工具编译handleAll.go
生成可执行文件。在新的终端中执行handleAll
会产生如下的输出:
另一个终端命令输出如下:
$ ps ax | grep ./handleAll | grep -v grep
$ kill -s HUP 49902
$ kill -s USR2 49902
$ kill -s USR1 49902
$ kill -s INT 49902