面试 | Linux 信号量机制

论坛 期权论坛 期权     
力扣LeetCode算法研究所   2019-7-15 08:38   4273   0
点击上方蓝字设为星标


每周一、三、五上午 8:30 准时推送
下面开始今天的学习~




很多小伙伴在面试中会被问到一个概念——Linux 信号量机制。本篇文章将介绍一下这个与我们生态息息相关的概念。
什么是信号量?对于 Linux 工作者来说,一个非常常见的工具叫做
  1. htop
复制代码
(可以理解为一个人类友好的
  1. top
复制代码
),当我们想结束一些程序的时候,会找到对应进程(进程和线程又有什么区别呢?他们之间有多少区别呢?)——并且按下 F9 ,然后从左侧选择一个合适的选项然后按下 Enter 。


如果运气好的话,程序就停了,这个时候我们可能往往就重启那个程序并且继续欢乐了,却较少关注左侧那些是什么,它们到底是什么呢?



[h1]什么是信号[/h1]信号也就是信号量,那么信号量具体是什么呢?
在 Linux 中,信号是进程间通讯的一种方式,它采用的是异步机制。当信号发送到某个进程中时,操作系统会中断该进程的正常流程,并进入相应的信号处理函数执行操作,完成后再回到中断的地方继续执行。
需要说明的是,信号只是用于通知进程发生了某个事件,除了信号本身的信息之外,并不具备传递用户数据的功能。
看起来有点难理解?我们看一个可能大家都听说过的信号——SIGINT(不是 SIGAINT ),一般来说它会在我们在终端中按下 Ctrl-C 的时候触发,操作时文字描述是:用户发送 INTR 字符,用于通知前台进程组终止进程。
来看另一个实际的例子:当我们需要结束一个程序的时候,使用 SIGKILL 信号和 SIGTERM 信号表面上看来都可以用来结束进程,那么他们之间有什么区别呢?
用文字描述就是:SIGTERM 用来结束程序(当然,这个信号可以被捕获、阻塞或忽略),SIGKILL 用来无条件结束程序(这个信号不能被捕获、阻塞或忽略),如果感觉文字比较难以记忆的话,我们来看一张图:


看完这张图是不是好理解多了呢?
[h1][/h1]

[h1]有哪些常见信号[/h1]常见的 Linux 信号有哪些呢?
  • Ctrl-C发送 INT 信号(SIGINT);默认情况下,这会导致进程终止。
  • Ctrl-Z发送 TSTP 信号(SIGTSTP);默认情况下,这会导致进程挂起。
  • Ctrl-\发送 QUIT 信号(SIGQUIT);默认情况下,这会导致进程终止并且将内存中的信息转储到硬盘(核心转储)。


有很多的信号用于完成各种各样的事情,这些信号的定义在 signal.h 中,除了少部分比较常用的信号以外,其他的在需要时直接 Google 一下就好了,没必要死记硬背。



[h1]信号是如何处理的[/h1]我们需要重点了解的是信号发送进去后程序是如何运行的?对这方面知识的了解有助于增加我们对于程序运行的了解。
每个信号都有自己的响应动作,当接收到信号时,进程会根据信号的响应动作执行相应的操作,信号的响应动作有以下几种:
  • 中止进程(Term)
  • 忽略信号(Ign)
  • 中止进程并保存内存信息(Core)
  • 停止进程(Stop)
  • 继续运行进程(Cont)
用户可以通过 signal 或 sigaction 函数修改信号的响应动作(也就是常说的“注册信号”,在文章的后面会举例说明)。另外,在多线程中,各线程的信号响应动作都是相同的,不能对某个线程设置独立的响应动作。
信号处理函数是运行在用户态的,调用处理函数前,内核会将当前内核栈的内容备份拷贝到用户栈上,并且修改指令寄存器将其指向信号处理函数,接下来进程返回到用户态中,执行相应的信号处理函数。
信号处理函数执行完成后,还需要返回内核态,检查是否还有其它信号未处理。如果所有信号都处理完成,就会将内核栈恢复(从用户栈的备份拷贝回来),同时恢复指令寄存器将其指向中断前的运行位置,最后回到用户态继续执行进程。
[h1][/h1]

[h1]如何发送信号[/h1]用于发送信号的函数有
  1. raise
复制代码
  1. kill
复制代码
  1. killpg
复制代码
  1. pthread_kill
复制代码
  1. tgkill
复制代码
  1. sigqueue
复制代码
,这几个函数的含义和用法都大同小异,有兴趣的同学可以自行学习~

相信有了如上对于 Linux 信号的一些介绍后,在我们下一次遇到 SIGTERM 等「专业术语」的时候就可以更加从容。

[h1]参考文献[/h1][h1]1.Linux 信号处理机制[/h1]2.Signal (IPC)



本文作者:Nova Kwok
编辑&版式:霍霍
声明:本文归 “力扣” 版权所有,如需转载请联系。
文中部分图片来源于网络,为非商业用途使用,如有侵权联系删除。






分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:5
帖子:1
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP