37 | 信号(上):项目组A完成了,如何及时通知项目组B?
刘超
该思维导图由 AI 生成,仅供参考
上一节最后,我们讲了信号的机制。在某些紧急情况下,我们需要给进程发送一个信号,紧急处理一些事情。
这种方式有点儿像咱们运维一个线上系统,为了应对一些突发事件,往往需要制定应急预案。就像下面的列表中一样。一旦发生了突发事件,马上能够找到负责人,根据处理步骤进行紧急响应,并且在限定的事件内搞定。
我们现在就按照应急预案的设计思路,来看一看 Linux 信号系统的机制。
首先,第一件要做的事情就是,整个团队要想一下,线上到底能够产生哪些异常情况,越全越好。于是,我们就有了上面这个很长很长的列表。
在 Linux 操作系统中,为了响应各种各样的事件,也是定义了非常多的信号。我们可以通过 kill -l 命令,查看所有的信号。
这些信号都是什么作用呢?我们可以通过 man 7 signal 命令查看,里面会有一个列表。
就像应急预案里面给出的一样,每个信号都有一个唯一的 ID,还有遇到这个信号的时候的默认操作。
一旦有信号产生,我们就有下面这几种,用户进程对信号的处理方式。
1.执行默认操作。Linux 对每种信号都规定了默认操作,例如,上面列表中的 Term,就是终止进程的意思。Core 的意思是 Core Dump,也即终止进程后,通过 Core Dump 将当前进程的运行状态保存在文件里面,方便程序员事后进行分析问题在哪里。
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
本文深入介绍了如何通过API注册一个信号处理函数。首先,文章详细讲解了Linux信号系统的机制,列举了各种信号及其作用,并介绍了用户进程对信号的处理方式。接着,文章详细讲解了信号处理的最常见流程,包括注册信号处理函数和发送信号两个步骤。在注册信号处理函数方面,文章介绍了使用signal函数和sigaction函数的区别,以及如何通过这两种方法将信号和相应的动作进行关联。此外,还强调了signal函数不是系统调用,而是glibc封装的一个函数,不同的实现方式会导致行为的不同。文章还深入探讨了信号处理函数的内核实现,包括系统调用rt_sigaction和进程内核数据结构的设置。总的来说,本文通过详细介绍Linux信号系统的机制和信号处理的流程,为读者提供了深入了解和掌握如何通过API注册一个信号处理函数的方法和技巧。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《趣谈 Linux 操作系统》,新⼈⾸单¥68
《趣谈 Linux 操作系统》,新⼈⾸单¥68
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(10)
- 最新
- 精选
- LDxy信号类似内核里面的中断,只不过是在用户态的
作者回复: 是的
2019-06-2526 - geraltlaushc语言开发者路过,表示以前从来不知道signal不是系统调用
作者回复: strace一下
2019-06-217 - 免费的人关于SA_ONESHOT,为什么我平时用signal的时候,处理函数可以被重复调用呢
作者回复: 使用的库不一样?
2019-06-2121 - 欢乐小熊收获满满, 不过看了标题以为是信号发送的流程, 结果学到了信号的注册和处理
作者回复: 还有信号下
2019-06-211 - Luke信号是不是操作系统的一个原语,在Windows端,对应的实现是消息Message循环
作者回复: windows不太清楚
2019-06-24 - 眭东亮课后练习,参考文档: https://www.cnblogs.com/wblyuyang/archive/2012/11/13/2768923.html https://www.runoob.com/linux/linux-comm-kill.html2019-07-124
- JT老师,我测试过使用 signal 函数注册信号处理函数,注册一次是一直有效。每次给进程发信号都会调用信号处理函数2019-10-182
- hello一个进程如果一瞬间收到很多同一个信号,那task_struct的action最多能保存几个呢2019-11-1011
- NoTryNoSuccess“SEGSTOP”笔误,应为“SIGSTOP”。2023-04-24归属地:湖北
- Geek_1ec22e信号注册是针对所有进程还是单个进程?2021-09-08
收起评论