[学习笔记]可靠信号、不可靠信号


不可靠信号PK可靠信号

q  linux信号机制基本上是从unix系统中继承过来的。早期unix系统中的信号机制比较简单和原始,后来在实践中暴露出一些问题,它的主要问题是:

q  进程每次处理信号后,就将对信号的响应设置为默认动作。在某些情况下,将导致对信号的错误处理;因此,用户如果不希望这样的操作,那么就要在信号处理函数结尾再一次调用signal(),重新安装该信号。

q  早期unix下的不可靠信号主要指的是进程可能对信号做出错误的反应以及信号可能丢失。

q  linux支持不可靠信号,但是对不可靠信号机制做了改进:在调用完信号处理函数后,不必重新调用该信号的安装函数(信号安装函数是在可靠机制上的实现)。因此,linux下的不可靠信号问题主要指的是信号可能丢失。


总结:unix信号机制不可靠地方,1)处理完信号以后,需要重新再注册信号;2)信号可能丢失。linux下已经对1做了优化。


可靠信号

q  随着时间的发展,实践证明,有必要对信号的原始机制加以改进和扩充。所以,后来出现的各种unix版本分别在这方面进行了研究,力图实现"可靠信号"。由于原来定义的信号已有许多应用,不好再做改动,最终只好又新增加了一些信号,并在一开始就把它们定义为可靠信号,这些信号支持排队,不会丢失。同 时,信号的发送和安装也出现了新版本:信号发送函数sigqueue()及信号安装函数sigaction()。


总结:sigaction和signal函数,都是调用内核服务do_signal函数;

内核服务函数(应用系统无法调用的函数)


实时信号(都是可靠信号)和非实时信号(不可靠信号)

q  早期Unix系统只定义了32种信号,Ret hat7.2支持64种信号,编号0-63(SIGRTMIN=31,SIGRTMAX=63),将来可能进一步增加,这需要得到内核的支持。前32种信号已经有了预定义值,每个信号有了确定的用途及含义,并且每种信号都有各自的缺省动作。如按键盘的CTRL+C时,会产生SIGINT信号,对该信号的默认反应就是进程终止。后32个信号表示实时信号,等同于前面阐述的可靠信号。这保证了发送的多个实时信号都被接收。实时信号是POSIX标准的一部分,可用于应用进程。

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


实时信号和非实时信号

?       Man 7 signal 查看手册

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

复制去Google翻译翻译结果

时间: 2024-10-10 01:06:24

[学习笔记]可靠信号、不可靠信号的相关文章

[离散时间信号处理学习笔记] 11. 连续时间信号的采样与重构

这一节主要讨论采样定理,在<傅里叶变换及其应用及其学习笔记>中有进行过推导与讲解,因此下面的内容也大同小异.不过如果是从<离散时间信号处理>这一本书的内容开始学习到这一节,则应先学习本文内容所需要的一些前置知识:傅里叶变换(连续时间),主要用到的是脉冲函数$\delta$,以及周期脉冲函数Ш的傅里叶变换与相关性质. 周期采样 假设有连续信号$x_c(t)$,我们需要通过对该信号进行采样才能得到离散信号,即样本序列$x[n]$.连续信号与离散信号有以下关系: $x[n] = x_c(

apue学习笔记(第十章 信号)

本章先对信号机制进行综述,并说明每种信号的一般用法. 信号概念 每个信号都有一个名字,这些名字都以3个字符SIG开头.在头文件<signal.h>中,信号名都被定义为正整形常量. 在某个信号出现时,可以按下列3种方式之一进行处理: 1 忽略该信号.大多数信号都可以使用这种方式进行处理,但有两种信号却决不能被忽略:SIGKILL和SIGSTOP(只能执行系统默认动作). 2 捕获信号.通知内核在某信号发生时,调用一个用户函数对这种时间进行处理. 3 执行系统默认动作.对于大多数信号的系统默认动作

[学习笔记]可靠信号与不可靠信号编程实践

可靠信号.不可靠性信号的观察 综合案例 1.  创建子进程和父进程 2.  注册SIGINT非实时信号  SIGRTMIN 实时信号 添加到到进程阻塞中 3.  注册用户自定义信号SIGUSR1 4.  子进程发送3次非实时信号,发3次实时信号 5.  子进程发送 SIGUSR1解除信号阻塞: 6.  观察实时信号和非实时信号的表现与区别! 7. man手册sigaction中 struct sigaction { void (*sa_handler)(int); void (*sa_sigac

[离散时间信号处理学习笔记] 12. 连续时间信号的离散时间处理以及离散时间信号的连续时间处理

连续时间信号与离散时间信号之间的关系 下表为各符号的解释 Symbol FT DTFT Info $x_c(t)$ $X_c(j\Omega)$ - 连续时间信号 $x[n]$ - $X(e^{j\omega})$ 离散时间信号 $s(t)$ $S(j\Omega)$ - 周期脉冲函数.即采样函数 $x_s(t)$ $X_s(j\Omega)$ - 信号周期采样的数学表示 $\Omega_N$ - - 奈奎斯特频率,也就是带限信号的受限频率 $\Omega_s$ - - 采样频率 $T$ - -

Linux学习笔记(10)-信号

所谓信号(singal),在我的理解来说,其实和单片机开发中的中断差不多,但是它并非是由系统硬件所提供的,而是软件操作系统的支持的一种提醒机制. 收到信号之后的处理方法,一般由三种: (1)第一种是类似于中断处理函数,对于要处理的信号,进程指定某个处理函数. (2)第二种是忽略某个信号,不做任何处理. (3)第三种是使用系统默认的处理方式,比如Ctrl+c的终止当前进程. Linux中常用的信号有30多种,每个信号都以关键字SIG开头,比如异常终止的信号,名叫SIGABRT. 在头文件<Sing

PyQt5学习笔记06----Qt Designer自定义信号emit及传参

from PyQt5 import QtWidgets,QtCore from untitled import Ui_Form import time class MyWindow(QtWidgets.QWidget,Ui_Form): _signal=QtCore.pyqtSignal(str) #定义信号,定义参数为str类型 def __init__(self): super(MyWindow,self).__init__() self.setupUi(self) self.myButto

APUE学习笔记——10.可靠信号与不可靠信号

首先说明:现在大部分Unix系系统如Linux都已经实现可靠信号. 1~31信号与SIGRTMIN-SIGRTMAX之间并不是可靠信号与不可靠信号的区别,在大多数系统下他们都是可靠信号. 只不过: 1~31信号                              --不支持排队,为普通信号. SIGRTMIN-SIGRTMAX信号 --支持排队,实时信号 不可靠信号 什么是不可靠信号: 不可靠的意思是信号可能丢失或者被错误处理. 在早起系统中,信号存在两大缺陷,导致了信号不可靠. 缺陷一:

python学习笔记——信号模块signal

基于python学习笔记--多进程间通信--Linux信号基础的学习基础,进一步学习Python标准库中的signal模块. 尽管signal是python中的模块,但是主要针对UNIX平台(比如Linux,MAC OS),而Windows内核中由于对信号机制的支持不充分,所以在Windows上的Python不能发挥信号系统的功能. signal模块负责python程序内部的信号处理:典型的操作包括信号处理函数.暂停并等待信号,以及定时发出SIGALRM等: 1 signal基本信号名 引入模块

APUE学习笔记——10.9 信号发送函数kill、 raise、alarm、pause

转载注明出处:Windeal学习笔记 kil和raise kill()用来向进程或进程组发送信号 raise()用来向自身进程发送信号. #include <signal.h> int kill(pid_t pid,int signo); int raise(int signo); Both return: 0 if OK,?1 on error kill向进程号为pid的进程发送signo信号 能够看出 以下两行代码是等价的: kill(getpid(), signo); raise(sig