想做个网站找谁做,淘宝手机网站模板下载安装,网站开发技术主题,试看30秒做受小视频网站先来简单谈谈C语言中的信号#xff08;signal#xff09;
首先#xff0c;signal是C语言库中的函数#xff0c;它实际上是软中断#xff0c;也就是软件发出的终端#xff0c;本质来说#xff0c;类似于int n。
对于接收到该软中断信号的进程#xff0c;就会停下手头的…先来简单谈谈C语言中的信号signal
首先signal是C语言库中的函数它实际上是软中断也就是软件发出的终端本质来说类似于int n。
对于接收到该软中断信号的进程就会停下手头的工作转而去执行信号处理程序 signal handler。
对于这一点是与硬件中断的方式类似的。与硬件中断类比学习会更容易
因此我们需要知道的是
有哪些可用的软中断就像硬件的除法零中断、溢出中断、外设中断…软中断处理程序有哪些就像中断服务程序位置信息在idt、ivt 默认的软中断服务程序系统启动的时候就初始化默认的中断服务程序用户自定义软中断服务程序操作系统可自定义中断服务程序
以及需要明白
中断何时被触发触发条件谁发出的中断谁接收的中断
以上都是抽象层次的理解我们缕一缕过程
进程x执行进程x触发中断 -- 发出软中断进程y接收到中断进程x该干啥干啥进程y停止当前的任务转而执行中断服务程序执行完成进程y继续执行自己的程序
至于进程x和y可以的
同一进程两个进程 父进程与子进程至于两个独立进程先暂时不管想做到这点至少得让二者能够通信
好整体框架梳理好了我们慢慢说。
有哪些信号 All signals in c/c 上面的参考链接给出了所有的信号现在我们简单举例说明。
SignalValueDescriptionSIGCHLD17Child status has changed (POSIX). Signal sent to parent process whenever one of its child processes terminates or stops.See the YoLinux.com Fork, exec, wait, waitpid tutorial
SIGCHLD信号父进程子进程
请看我的另一篇文章信号量SIGCHLD的使用如何让父进程得知子进程执行结束如何让父进程区分多个子进程的结束
信号处理函数 参考 [1] Signals in C language [2] How to use signal handlers in C language? 信号处理函数有两类
系统自带的处理函数用户自定义函数
与底层硬件中断是类似的中断向量表是自带的也允许用户自定义。
关于中断的默认处理以及自定义处理链接也有了。
谁发出谁接收
发出者操作系统或者某进程接收者某进程
至于细节取决于你使用了哪个信号。每个信号的发出和接收动作和对象以及默认的处理函数都是规定好了的。
如何执行
这个不再提了…就那么几个套路很容易。
需要特别说明的是如果进程1接收其他进程的信号X在进程1执行信号x处理函数之前如果多个信号x都发给了进程1那么这些信号可能被合并进程1只执行1次信号处理函数。这可能的原因很多比如操作系统很忙… 下面这篇参考链接我还没有处理 Handling multiple SIGCHLD