go语言中signal.Notify

更新时间:2023-07-15 07:17:34 阅读: 评论:0

go语⾔中signal.Notify
go中的信号量
信号值动作说明
电脑清理垃圾SIGHUP1Term终端控制进程结束(终端连接断开)
SIGINT2Term⽤户发送INTR字符(Ctrl+C)触发
SIGQUIT3Core⽤户发送QUIT字符(Ctrl+/)触发
SIGILL4Core⾮法指令(程序错误、试图执⾏数据段、栈溢出等)
初中思想品德
SIGABRT6Core调⽤abort函数触发
SIGFPE8Core算术运⾏错误(浮点运算错误、除数为零等)
SIGKILL9Term⽆条件结束程序(不能被捕获、阻塞或忽略)
SIGSEGV11Core⽆效内存引⽤(试图访问不属于⾃⼰的内存空间、对只读内存空间进⾏写操作) SIGPIP
E13Term消息管道损坏(FIFO/Socket通信时,管道未打开⽽进⾏写操作) SIGALRM14Term时钟定时信号
SIGTERM15Term结束程序(可以被捕获、阻塞或忽略)
SIGUSR130,10,16Term⽤户保留
SIGUSR231,12,17Term⽤户保留
SIGCHLD20,17,18Ign⼦进程结束(由⽗进程接收)
SIGCONT19,18,25Cont继续执⾏已经停⽌的进程(不能被阻塞)
SIGSTOP17,19,23Stop 停⽌进程(不能被捕获、阻塞或忽略) SIGTSTP 18,20,24 Stop 停⽌进程(可以被捕获、阻塞或忽略) SIGTTIN 21,21,26 Stop 后台程序从终端中读取数据时触发 SIGTTOU 22,22,27 Stop 后台程序向终端中写数据时触发
有些信号名对应着3个信号值,这是因为这些信号值与平台相关
SIGKILL和SIGSTOP这两个信号既不能被应⽤程序捕获,也不能被操作系统阻塞或忽略
kill与kill9的区别
kill pid的作⽤是向进程号为pid的进程发送SIGTERM(这是kill默认发送的信号),该信号是⼀个结束进程的信号且可以被应⽤程序捕获。若应⽤程序没有捕获并响应该信号的逻辑代码,则该信号的默认动作是kill掉进程。这是终⽌指定进程的推荐做法。
分配利润分录
kill -9 pid则是向进程号为pid的进程发送SIGKILL(该信号的编号为9),从本⽂上⾯的说明可知,SIGKILL既不能被应⽤程序捕获,也不能被阻塞或忽略,其动作是⽴即结束指定进程。通俗地说,应⽤程序根本⽆法“感知”SIGKILL信号,它在完全⽆准备的情况下,就被收到SIGKILL信号的操作系统给⼲掉了,显然,在这种“暴⼒”情况下,应⽤程序完全没有释放当前占⽤资源的机会。事实上,SIGKILL信号是直接发给init进程的,它收到该信号后,负责终⽌pid指定的进程。在某些情况下(如进程已经hang死,⽆法响应正常信号),就可以使⽤kill -9来结束进程。
若通过kill结束的进程是⼀个创建过⼦进程的⽗进程,则其⼦进程就会成为孤⼉进程(Orphan Process),这种情况下,⼦进程的退出状态就不能再被应⽤进程捕获(因为作为⽗进程的应⽤程序已经不存在了),不过应该不会对整个linux系统产⽣什么不利影响。
优雅地退出程序
在长时间的程序运⾏过程中,可能有⼤量的系统资源被申请,⽆论在以何种⽅式退出前,他们应该及时将这些资源释放并将状态输出到⽇志中⽅便调试和排错。
signal.Notify⽅法监听和捕获信号量
func Notify(c chan<- os.Signal, sig …os.Signal)
⾸先定义⼀个chan传递信号量,然后说明那些信号量是需要被捕获的(不填的话就默认捕获任何信号量)
sc :=make(chan os.Signal,1)
signal.Notify(sc, syscall.SIGHUP, syscall.SIGINT, syscall.SIGTERM, syscall.SIGQUIT)
猫之报恩
监听指定信号量
EXIT:
事业目标
for{纪律整顿心得体会
sig :=<-sc
橡树和芦苇switch sig {
ca syscall.SIGQUIT, syscall.SIGTERM, syscall.SIGINT:
log.Panic("SIGQUIT")
ca syscall.SIGHUP:
生态理念
log.Panic("SIGHUP")
ca syscall.SIGHUP:
log.Panic("SIGINT")
default:
break EXIT
}
}

本文发布于:2023-07-15 07:17:34,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/82/1097515.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:进程   信号   程序   捕获   结束   不能   终端   错误
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图