golang(os/signal)阅读

发布时间:2019-08-06 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了golang(os/signal)阅读脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

golang(os/signal)阅读
信号和信号函数
在unix-like系统中,我们要经常用到信号和信号处理函数。我们在linux编程中,经常要处理程序接收到的函数。比如:

signal(SIginT, SignalHandler)
上面的函数注册SIGINT的信号处理函数SignalHandler,当程序运行中,当收到SIGINT信号,程序相应的执行SignalHandler函数。

信号的分类
特殊信号
SIGKILL和SIGSTOP不能被程序修改。

SIGKILL 杀死一个程序
SIGSTOP 暂停一个程序
//运行一个程序
for {

    time.Sleep(1 * time.Second)
}

//程序是个死循环
// 使用SIGINT 退出
^Csignal: interrupt
// 程序退出
// 忽略SIGINT,SIGSTOP和SIGKILL
signal.Ignore(Syscall.SIGKILL, syscall.SIGINT, syscall.SIGSTOP)
//SIGINT ^C
//SIGSTOP
[3] + 25295 susPEnded go run non-caught-signal.go
//SIGKILL
mchen 25413 25295 0 06:04 pts/5 00:00:00 [non-caught-sign] <defunct>
同步信号
同步信号是程序运行期间发生错误触发的信号。

SIGBUS 意味着指针所对应的地址是有效地址,但总线不能正常使用该指针。通常是未对齐的数据访问所致。
SIGFPE 是当一个进程执行了一个错误的算操作时发送给它的信号。
SIGSEGV 味着指针所对应的地址是无效地址,没有物理内存对 应该地址。
Note:go程序碰到此类信号,go程序会进入panic。

异步信号
kernel或者其他程序发送给此程序的信号是异步信号。 几个示例信号:

SIGHUP 程序丢失终端
SIGINT 在程序执行期间,交互终端按下CTRL+C
SIGQUIT 在程序执行期间,交换终端键盘按下CTRL+/
go语言对信号的处理
go 信号的默认行为
同步信号会引发panic
SIGHUP,SIGINT,SIGTERM 程序退出
SIGQUIT,SIGILL,SIGTRAP,SIGAbrT,SIGSTEFLT,SIGSYS 程序退出,并且dump出栈信息
SIGTSTP,SIGTTIN,SIGTTOU获取系统默认行为
SIGPROF 性能测试用
改变信号的默认处理函数
func Ignore(sig ...os.Signal) 忽略某些信号,相当于C函数signal(sig, SIG_IGN) func Ignored(sig os.Signal) bool 判断某个信号是否是被忽悠的 func Notify(c chan<-, sig ...os.Signal)

收到的信号,发往channel c

c 必须有足够的缓存来储存信号,也就是buffer channel

一个处理一个信号的c,可以设置buffer为1

可以调用notify多次设置多个channel,接收同一信号。

清空notify使用Stop

脚本宝典总结

以上是脚本宝典为你收集整理的golang(os/signal)阅读全部内容,希望文章能够帮你解决golang(os/signal)阅读所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。