【linux 信号学习一】信号基础

信号是进程间通信的一种机制,用于处理异步事件。信号发送者包括硬件异常、用户输入和软件事件。接收者通常是进程,处理方式有忽略、捕获和默认处理。信号分为可靠和不可靠,实时和非实时,其中不可靠信号可能丢失,实时信号支持排队。
摘要由CSDN通过智能技术生成

信号基本概念

信号是什么

  1. 定义:信号是事件发生时,用来进程间通信的机制,也可以称为软中断。其实是在软件层次上对中断机制的一种模拟。大多数情况下,是无法预测信号的准确到达时间,所以,信号提供了一种处理异步事件的方法。
  2. 与硬中断的相同之处:都能打断当前执行的程序。
  3. 信号本质:信号的本质是int型数据,类似于硬中断中的中断号。内核针对每个信号 ,都给其定义了一个唯一的编号,从数字1开始,顺序展开。这些信号都有对应的名字(宏定义的形式)。这些宏在 <signum.h> 头文件中,不同系统信号的实际编号可能不同,所以在程序中一般使用信号的名字
  4. 信号是异步的:只有信号产生时,才会告知程序、然后打断当前执行的正常流程、跳转去执行中断服务函数,这就是异步处理方式。

信号的发送者

  1. 硬件异常:检测到硬件异常 -> 内核 -> 相应的进程
  2. 终端输入产生信号的特殊字符:CTRL+C、CTRL+Z
  3. kill()系统调用:kill函数可以向进程发送任意信号,但是信号的发送者和接收者必须是同一个拥有者(即同一用户),或者信号是有root用户发送的。
  4. kill命令:kill命令是通过调用kill系统调用实现的。
  5. 软件事件:例如定时器的定时时间到、子进程退出、进程执行的CPU时间超时等。

信号接收者和处理方式

接收者

进程,信号通常是发送给对应的进程的,当信号到达后,该进程做出相应的处理。

处理方式

  • 忽略信号:信号到达进程后,进程可以忽略对该信号的处理,就和没有接收到该信号一样。但是SIGKILL、SIGSTOP这两个信号不能忽略 ,因为这两个信号会向内核和超级用户提供终止或停止的可靠办法。
  • 捕获信号:捕获信号就是指当进程接收到该信号时,执行用户定义的信号处理函数,该函数需要预先使用signal()函数绑定。
  • 默认处理方式:进程不对该信号做出处理,交给系统进行处理,每个信号都有一个默认的处理方式。对于大多数信号来说,系统的默认处理方式就是终止该进程。

信号的分类

可靠信号与不可靠信号

不可靠信号:有可能会丢失的信号,信号值小于34的信号都是不可靠信号,
可靠信号:支持排队的信号,
新的信号发送函数:sigqueue()、sigaction()

实时信号与非实时信号

非实时信号都不支持排队,都是不可靠信号,一般称为标准信号,
实时信号都支持排队,都是可靠信号,保证了发送多个信号都能被接收,可用于进程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值