处理所有信号

    handleAll.go第一部分代码如下:

    handleAll.go第二部分代码如下:

    1. func main() {
    2. sigs := make(chan os.Signal, 1)
    3. signal.Notify(sigs)

    所以,所有的魔法都在signal.Notify(sigs)调用上。由于没有指定信号,所有输入信号都将被处理。

    handleAll.go第三部分代码如下:

    使用其中一个信号退出程序非常方便。

    这给了你在需要时在程序中做一些内务管理的机会。此时,信号被用于这个目的。但这并不妨碍你使用SIGKILL来终止程序。

    1. for {
    2. time.Sleep(30 * time.Second)
    3. }
    4. }

    你仍需要调用time.Sleep()以阻止程序立即退出。

    同样,最好使用工具编译handleAll.go生成可执行文件。在新的终端中执行handleAll会产生如下的输出:

    另一个终端命令输出如下:

    1. $ ps ax | grep ./handleAll | grep -v grep
    2. $ kill -s HUP 49902
    3. $ kill -s USR2 49902
    4. $ kill -s USR1 49902
    5. $ kill -s INT 49902