IPC--信号(1)--基本知识

信号是Linux系统中一种异步通信机制,用于模拟中断并通知进程发生了特定事件。本文详细介绍了信号的基本知识,包括信号的产生、来源、处理方式以及信号的阻塞和未决状态。通过示例展示了信号处理函数的注册、信号的捕获以及sigsuspend函数的使用。此外,还探讨了不同信号如SIGINT、SIGQUIT的处理情况及其在进程中的作用。
摘要由CSDN通过智能技术生成

信号本质

信号是在软件层次上对中断机制的一种模拟,在原理上,一个进程收到一个信号与处理器收到一个中断请求可以说是一样的。

信号是异步的,一个进程不必通过任何操作来等待信号的到达,事实上,进程也不知道信号到底什么时候到达。

信号是进程间通信机制中唯一的异步通信机制,可以看作是异步通知,通知接收信号的进程有哪些事情发生了。

信号机制经过POSIX实时扩展后,功能更加强大,除了基本通知功能外,还可以传递附加信息。

信号来源

信号事件的发生有两个来源:

硬件来源(比如我们按下了键盘或者其它硬件故障);

软件来源,最常用发送信号的系统函数是kill, raise, alarm和setitimer以及sigqueue函数,软件来源还包括一些非法运算等操作。

信号种类

    第一种:

    可靠信号与不可靠信号

    1. 信号值小于SIGRTMIN (Red hat 7.2中,SIGRTMIN=32,SIGRTMAX=63) 的信号都是不可靠信号;

    2. 不可靠信号的问题(主要只信号可能丢失):

       A. 进程每次处理信号后,就将对信号的响应设置为默认动作。在某些情况下,将导致对信号的错误处理;因此,用户如果不希望这样的操作,

           那么就要在信号   处理函数结尾再一次调用signal(),重新安装该信号。( 已经改善)

       B. 信号可能丢失,后面将对此详细阐述。

    3. 可靠信号支持排队,不会丢失。

    第二种:

    实时信号与非实时信号:

    1. 非实时信号都不支持排队,都是不可靠信号;

    2. 实时信号都支持排队,都是可靠信号。

 

进程对信号的响应

     1. 忽略信号,即对信号不做任何处理,其中,有两个信号不能忽略:SIGKILL及 SIGSTOP;

     2. 执行缺省操作,Linux对每种信号都规定了默认操作。注意,进程对实时信号的缺省反应是进程终止。

     3. 捕捉信号。定义信号处理函数,当信号发生时,执行相应的处理函数;


信号阻塞与信号信号的未决

信号的“未决”是一种状态,指的是从信 号的产生到信号被处理前的这一段时间;
信号的“阻塞”是一个开关动作,指的是阻止信号被处理,但不是阻止信号产生。


伪demo:

 进程捕获信号过程

1. 用户输入命令,在Shell下启动一个前台进程。
2. 用户按下Ctrl-C,这个键盘输入产生一个硬件中断。
3. 如果CPU当前正在执行这个进程的代码,则该进程的用户空间代码暂停执行,CPU从用户态切换到内核

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值