C语⾔中信号函数(signal)的使⽤
先来简单谈谈C语⾔中的信号(signal)
⾸先,signal是C语⾔库中的函数,它实际上是软中断,也就是软件发出的终端,本质来说,类似于int n。对于接收到该软中断信号的进程,就会停下⼿头的⼯作,转⽽去执⾏信号处理程序 signal handler。
对于这⼀点,是与硬件中断的⽅式类似的。与硬件中断类⽐学习会更容易!
因此,我们需要知道的是
有哪些可⽤的软中断:就像硬件的除法零中断、溢出中断、外设中断…
软中断处理程序有哪些:就像中断服务程序(位置信息在idt、ivt)
默认的软中断服务程序:系统启动的时候就初始化默认的中断服务程序
⽤户⾃定义软中断服务程序:操作系统可⾃定义中断服务程序自定义函数怎么用c语言
以及需要明⽩
中断何时被触发(触发条件)
谁发出的中断
谁接收的中断
以上,都是抽象层次的理解,我们缕⼀缕过程
1. 进程x执⾏
2. 进程x触发中断 --> 发出软中断
3. 进程y接收到中断,进程x该⼲啥⼲啥
4. 进程y停⽌当前的任务,转⽽执⾏中断服务程序
5. 执⾏完成,进程y继续执⾏⾃⼰的程序
⾄于进程x和y,可以的
同⼀进程
两个进程
⽗进程与⼦进程
⾄于两个独⽴进程,先暂时不管,想做到这点⾄少得让⼆者能够通信
好,整体框架梳理好了,我们慢慢说。
有哪些信号
上⾯的参考链接给出了所有的信号,现在我们简单举例说明。
Signal Value Description
SIGCHLD17Child status has changed (POSIX). Signal sent to parent process whenever one of its child processes terminates or
stops.See the YoLinux
SIGCHLD信号:⽗进程⼦进程请看我的另⼀篇⽂章:
信号处理函数
参考:
[1]
[2]
信号处理函数有两类
系统⾃带的处理函数
⽤户⾃定义函数
与底层硬件中断是类似的,中断向量表是⾃带的,也允许⽤户⾃定义。
关于中断的默认处理以及⾃定义处理,链接也有了。
谁发出?谁接收?
发出者:操作系统,或者某进程
接收者:某进程
⾄于细节,取决于你使⽤了哪个信号。每个信号的发出和接收动作和对象,以及默认的处理函数,都是规定好了的。
如何执⾏?
这个不再提了…就那么⼏个套路,很容易。
需要特别说明的是,如果进程1接收其他进程的信号X,在进程1执⾏信号x处理函数之前,如果多个信号x都发给了进程1,那么,这些信号可能被合并,进程1只执⾏1次信号处理函数。这可能的原因很多,⽐如操作系统很忙…
下⾯这篇参考链接我还没有处理:
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论