关于我们

质量为本、客户为根、勇于拼搏、务实创新

< 返回新闻公共列表

进程间通信——信号原理及详解(附有案例代码)

发布时间:2023-06-26 22:00:42

1、信号概念


(1)信号是 Linux进程间通信的最古老的方式之一,是事件发生时对进程的通知机制,有时也称之为软件中断.它是在软件层次上对中断机制的一种模拟,是一种异步通信的方式。信号可以导致一个正在运行的进程被另一个正在运行的异步进程中断,转而处理某一个突发事件。


(2)发往进程的诸多信号,通常都是源于内核。引发内核为进程产生信号的各类事件如下:


       对于前台进程,用户可以通过输入特殊的终端字符来给它发送信号。比如输入Ctrl+C通常会给进程发送一个中断信号。

       硬件发生异常,即硬件检测到一个错误条件并通知内核,随即再由内核发送相应信号给相关进程。比如执行一条异常的机器语言指令,诸如被О除,或者引用了无法访问的内存区域。

       系统状态变化,比如 alarm定时器到期将引起SIGALRM信号,进程执行的CPU时间超限,或者该进程的某个子进程退出。

       运行kill 命令或调用kill 函数。


2、信号特点


(1)使用信号的两个主要目的是:


       让进程知道已经发生了一个特定的事情。


       强迫进程执行它自己代码中的信号处理程序。


(2)信号的特点:


       简单;


       不能携带大量信息;


       满足某个特定条件才发送优先级比较高;


(3)查看系统定义的信号列表:kill -l


(4) 前31 个信号为常规信号,其余为实时信号。


3、信号的物种默认处理动作


(1)查看信号的详细信息:man 7 signal


(2)信号的5 中默认处理动作

       Te rm        终止进程

       Ig n           当前进程忽略掉这个信号

       c ore         终止进程,并生成一个core文件

       sto p         暂停当前进程

       co nt         继续执行当前被暂停的进程


(3)信号的几种状态:产生、未决、递达


(4)SIGKILL和SIGSTOP信号不能被捕捉、阻塞或者忽略,只能执行默认动作。


4、信号相关函数


因涉及一些执行语句,禁止写入,请联系客服获取


5、kill 函数详解及案例


(1)kill 函数详解

因涉及一些执行语句,禁止写入,请联系客服获取


(2)kill 函数案例

因涉及一些执行语句,禁止写入,请联系客服获取

   


 6、alarm 函数详解及案例


(1) alarm 函数详解

因涉及一些执行语句,禁止写入,请联系客服获取


(2) alarm 函数案例

因涉及一些执行语句,禁止写入,请联系客服获取


7、setitimer 函数详解及案例 


 (1)setitimer 函数详解

因涉及一些执行语句,禁止写入,请联系客服获取


(2)setitimer 函数案例

因涉及一些执行语句,禁止写入,请联系客服获取


8、信号捕捉函数


 (1)信号捕捉函数

因涉及一些执行语句,禁止写入,请联系客服获取


(2)信号捕捉函数详解

因涉及一些执行语句,禁止写入,请联系客服获取


(3)信号捕捉函数案例

因涉及一些执行语句,禁止写入,请联系客服获取


9、信号集及相关函数


(1)信号集


1.用户通过键盘 Ctrl + C, 产生2号信号SIGINT (信号被创建)  2.信号产生但是没有被处理 (未决)  - 在内核中将所有的没有被处理的信号存储在一个集合中 (未决信号集)  - SIGINT信号状态被存储在第二个标志位上  - 这个标志位的值为0, 说明信号不是未决状态  - 这个标志位的值为1, 说明信号处于未决状态  3.这个未决状态的信号,需要被处理,处理之前需要和另一个信号集(阻塞信号集),进行比较  - 阻塞信号集默认不阻塞任何的信号,标志位为0  - 如果想要阻塞某些信号需要用户调用系统的API  4.在处理的时候和阻塞信号集中的标志位进行查询,看是不是对该信号设置阻塞了  - 如果没有阻塞,这个信号就被处理  - 如果阻塞了,这个信号就继续处于未决状态,直到阻塞解除,这个信号就被处理

   


(2)相关函数

因涉及一些执行语句,禁止写入,请联系客服获取


(3)信号集相关案例

因涉及一些执行语句,禁止写入,请联系客服获取



/template/Home/leiyu/PC/Static