首页 > 其他分享 >第六章学习笔记、知识完整性总结

第六章学习笔记、知识完整性总结

时间:2023-11-10 17:23:07浏览次数:40  
标签:中断 信号处理 笔记 进程 Unix 完整性 信号 第六章 define

目录
概述
信号和中断
Unix/Linux中的信号
信号与异常处理与IPC
实践
概述
本章介绍了信号、信号的产生、信号的内容和信号处理;介绍了信号和中断的统一管理,帮助建立对于信号的正确看待方式;信号在Unix/Linux是发挥怎样的作用,如何产生以及处理,PROC中的信号和信号作为进程通信(IPC)机制的适用性;验证信号处理的系列编程实践。
信号和中断
中断的定义

中断一个发送给进程的事件,它会把进程从正常的活动转移到其他的活动中去,即中断处理中。进程在完成中断后才会恢复到正常状态。

进程中断

一类发送给进程的中断,在Unix/Linux系统内中断被称为信号,每一个信号都有唯一的ID号,编号从1到31不等。PROC会根据不同的信号ID给出不同的操作。

硬件中断

发给处理器或CPU断点信号,可以来自硬件、其他处理器或自身。

进程的陷阱错误

由误判而产生的给自身的中断。这类异常中断在用户模式下发生时,进程在默认情况下会终止,并用一个可选的内存转储进行调试。在内核模式下发生陷阱的原因必是发生了硬件错误或是内核代码存在漏洞,此时Unix/Linux系统会打印一条PANIC错误信息,然后停止。

Unix/Linux中的信号
一些Unix/Linux信号实例

Ctrl & C

这个组合会发出一个键盘硬件中断信号,产生SIGINT(2)信号。

nohup a.out &

使进程在用户退出后仍然继续运行的命令,效果是使得生成的子进程忽略掉SIGHUP(1)信号,当用户退出后,还会像所有与终端相关的进程发送一个SIGHUP信号继续运行,后台程序将会中断与I/O设备的连接。

kill pid

发送一个SIGTERM(15)信号,杀死pid所标识的进程,如果进程拒绝死亡,可以使用kill -s 9 pid命令来杀死进程。

kill -s signal_number pid可以按不同参数杀死不同的进程。

Unix/Linux中的信号类型

如上文所述,在Unix/LInux系统中有31中不同的信号,每种信号都在signal.h中定义:

#define SIGHUP 1

#define SIGINT 2

#define SIGQUIT 3

#define SIGILL 4

#define SIGTRAP 5

#define SIGABRT 6

#define SIGIOT 6

define SIGBUS 7

define SIGFPE 8

define SIGKILL 9

define SIGUSR1 10

define SIGSEGV 11

define SIGUSR2 12

define SIGPIPE 13

define SIGALRM 14

define SIGTERM 15

define SIGSTKFLT 16

define SIGCHLD 17

define SIGCONT 18

define SIGSTOP 19

define SIGTSTP 20

define STGTTTN 21

define SIGTTOU 22

define SIGURG 23

define SIGXCPU 24

define SIGXFSZ 25

define SIGVTALRM 26

define SIGPROF 27

define SIGWINCH 28

define SIGPOLL 29

define SIGPWR 30

define SIGSYS 31

信号来源

Unix/Linux系统中的信号来源也是硬件、异常和其他进程,其中硬件产生的中断可以是来自中断组合键、间隔计时器和其他硬件错误。

PROC中的信号

PROC中有一个32位的向量来记录发送给进程的信号,每一位都代表了一个信号编号(0信号除外)。另有一个MASK位向量,用来屏蔽响应的信号。

信号处理函数

PROC中有一个信号处理数组 int sig[32],sig[32]指向对应的信号处理方式。0表示默认DEFault,1表示忽略IGNore,其他值则对应其他用户模式下预先安装的信号处理(捕捉)函数。

安装信号捕捉函数

int r = signal(int signal_number, void *handler);是信号捕捉的系统调用,可以用来修改选定的信号编号的处理函数(SIGKILL(9)和SIGSTOP(19)除外),已安装的信号处理函数将会进入捕捉函数入口:void catcher(int signal_number){···}

sigaction()系统调用是更好的信号捕捉函数,它的结果如下:

int sigaction (int signum, const struct sigaction *act, struct sigaction *oldact);

sigaction结构体如下:

struct sigaction{
void (sa_handler)(int);//指向处理函数
void (
sa_sigaction)(int ,siginfo_t * ,void );//接受更多的信号
sigset_t sa_mask;//要阻塞的信号
int sa_flags;//修改信号处理进程的行为,此时本参数的值应为SA_SIGINFO
void (
sa_restorer)(void);
}
信号与异常处理与IPC
信号处理

在内核模式下,会检查信号并处理未完成的信号。清除信号,迂回执行捕捉函数,恢复正常执行。

重置用户安装的信号捕捉函数。

信号与唤醒,唤醒陷入休眠的进程。

异常处理

当进程遇到异常时会陷入内核模式,将异常原因转为信号编号发给自己。在内核模式下内核就只会打印一条PANIC错误信后然后终止进程。

进程通过预先安装的信号捕捉函数处理用户模式下的程序错误。

在特殊情况下,它会让某个进程发出杀死另一个进程的信号。

IPC

在许多操作系统的书籍中,信号被归类为进程间的通信机制。基本原理是一个进程可以向另一个进程发送信号,使它执行预先安装的信号处理函数。

该机制并不可靠,因为可能会丢失信号。每个信号由位向量中的一个位表示,只能记 录一个信号的一次岀现.如果某个进程向另一个进程发送两个或多个相同的信号,它 们可能只在接收PROC中出现一次。实时信号被放入队列,并保证按接收顺序发送, 但操作系统内核可能不支持实时信号。
竞态条件:在处理信号之前,进程通常会将信号处理函数重置为DEFault。要想捕捉同一信号的再次出现,进程必须在该信号再次到来之前重新安装捕捉函数。否则,下 一个信号可能会导致该进程终止。在执行信号捕捉函数时,虽然可以通过阻塞同一信 号来防止竞态条件,但是无法防止丢失信号。
大多数信号都有预定义的含义。不加区别地任意使用信号不仅不能达到通信的目的,反而会造成混乱。例如,向循环进程发送SIGSEGV(11)段错误信号,出现错误的信息。
因此,试图将信号用作进程间通信手段实际上是对信号预期用途的过度延伸.应避免出现这种情况。

标签:中断,信号处理,笔记,进程,Unix,完整性,信号,第六章,define
From: https://www.cnblogs.com/sjd-sr/p/17824583.html

相关文章

  • 趣解适配器模式之《买了苹果笔记本的尴尬》
    〇、小故事小王考上了理想的大学,为了更好的迎接大学生活,他决定买一台苹果的笔记本电脑犒赏自己。电脑很快买好了,用起来也非常的流畅,但是,当他想要插U盘传资料的时候,尴尬的事情来了,这台电脑两侧的插口非常少,只有1个耳机插孔和2个雷电插孔,根本没有USB插口!这咋办呀?他赶快咨询了他的哥哥......
  • electron学习笔记
    1const{app,BrowserWindow,Menu,remote,ipcMain}=require("electron");2constpath=require("path");3constaxios=require('axios');4constisMac=process.platform==='darwin';56const......
  • 《Unix/linux系统编程》教材第6章学习笔记
    |第5章|信号和信号处理信号和中断“中断”是从I/O设备或协处理器发送到CPU的外部请求,它将CPU从正常执行转移到中断处理。与发送给CPU的中断请求一样,“信号”是发送给进程的请求,将进程从正常执行转移到中断处理。在讨论信号和信号处理之前,先来回顾中断的概念和机制,这有助于正确......
  • 2023年11月10日阅读笔记
    《黑客与画家》 为什么我会去阅读这本书籍呢?因为我最近在学习用java编写网络时感到枯燥和乏味,突发奇想去学习网络安全有关的知识。最初的自己还设想能成为一名黑客,因为他们似乎是高冷、神秘、聪明、无所不能的名词代表。而在阅读《黑客与画家》这本书的第一章内容后我对于黑客,......
  • 《信息安全系统设计与实现》第十周学习笔记
    信号和中断“中断”是从I/O设备或协处理器发送到CPU的外部请求,它将CPU从正常执行转移到中断处理。与发送给CPU的中断请求一样,“信号”是发送给进程的请求,将进程从正常执行转移到中断处理。“中断”是发送给“进程”的事件,它将“进程”从正常活动转移到其他活动,称为“中断处理......
  • 《信息安全系统设计与实现》第十周学习笔记
    《信息安全系统设计与实现》第十周学习笔记第六章信号和信号处理信号和中断(1)“中断”是从I/O设备或协处理器发送到CPU的外部请求,它将CPU从正常执行转移到中断处理。与发送给CPU的中断请求一样,“信号”是发送给进程的请求,将进程从正常执行转移到中断处理。(2)一个“进程”就是......
  • c#学习笔记-------------------Quartz.NET任务调度框架
    Quartz.NET任务调度框架 Quartz.NET是一个开源的作业调度框架,非常适合在平时的工作中,定时轮询数据库同步,定时邮件通知,定时处理数据等。Quartz.NET允许开发人员根据时间间隔(或天)来调度作业。它实现了作业和触发器的多对多关系,还能把多个作业与不同的触发器关联。整合了Quartz.......
  • ODE 复习笔记
    有三四周的课没听……基本就是一个速成版速成笔记Ch1IntroductionDifferentialEquationsandBasicConceptslinear,nonlinearorderhomogeneous,haveconstantcoefficientsTHM:AllODEscanbeequivalentlydescribedbyasystemof1st-orderODE.\(\Leftrig......
  • 将笔记本电脑的无线网卡变成AP
    全部使用命令行操作:1、查看是否支持:netshwlanshowdrivers如果有:支持的承载网络 :是2、设备无线AP:netshwlansethostednetworkmode=allowssid=testkey=123456783、启动AP:netshwlanstarthostednetwork4、关闭AP:netshwlanstophostednetwork ......
  • 打工笔记-------------------------.NET Reactor使用方法
    .NETReactor是一个用于保护.NET应用程序的代码混淆器和加密器。它可以防止应用程序被反编译和篡改使用步骤下载和安装.NETReactor:从DongleSoftware的官方网站下载.NETReactor5.9.8.0的安装程序,并按照提示进行安装。创建或导入项目:在.NETReactor中,创建一个新的......