欢迎大家来到IT世界,在知识的湖畔探索吧!
Signal 信号
有时我们希望Go程序能够智能地处理Unix信号。例如,我们可能希望服务器在接收到SIGTERM时能够正常关机,或者希望命令行工具在接收到SIGINT时停止处理输入。下面程序演示Go中如何使用通道来处理信号。
Go的信号通知工作由在通道中发送os.Signal值来实现。首先,创建一个通道来接收这些通知(以及一个在程序退出时发出通知的通道)。然后,使用函数signal.Notify通知寄存器该通道要接收哪些指定的信号通知。接着,程序中的协程用于执行阻塞接收指定的信号,当得到一个信号时,便打印出来,然后通知程序工作完成。程序在结束通道上等待,直到它得到一个值,然后退出。当运行这个程序,它将阻塞等待。通过键入CTRL C(终端上显示为^ C),我们可以发送SIGITN信号,程序打印中断信号的值,然后退出。
结果:
$ go run signals.go
awaiting signal
^C
interrupt
exiting
Exit 退出
使用函数os.Exit以指定的退出码立刻结束程序,当使用os.Exit时defer语句不会执行,因此示例中的fmt.Println永远不会执行。程序以状态3退出。注意,与C不同的是,GO不会使用main函数的整数返回值来作为指示退出状态,如果想以非零状态结束程序,则应该使用os.Exit函数。使用go run执行程序时,Go获得退出状态码并打印出来。通过建立和执行该程序的二进制文件,你可以从终端中看到它退出的状态码。
结果:
$ go run exit.go
exit status 3
$ go build exit.go
$ ./exit
$ echo $?
3
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://itzsg.com/48345.html