本文介绍: 当进程接收到信号,并且该信号没有被阻塞的话,进程就执行信号处理函数完成对信号的处理,每种信号都有其对应的处理函数,进程对所有信号处理函数集中由 signal_struct 结构体来管理,进程任务结构体中成员项 sig 指向该结构体。sa_mask 是一个信号屏蔽码,当进程处理某一个信号时,它被逻辑加(OR)到接收进程的信号 屏蔽码 blocked 上,进程信号屏蔽码的这种改变只是在信号处理期间有效,其目的是在进程执行 信号处理过程中屏蔽其它到达的信号。一般是子进程继承父进程的信号机制时的计数。
4 Linux 进程管理
4.5 Linux 信号
4.5.1 信号的作用和种类
1.信号机制
2.信号种类
信号产生的三种情况:
1.进程在执行过程中发生了某种错误,标志被置位,系统内核识别到错误标志,向有关进程发送相应信号,通知进程发生了运行错误。
2.系统或用户发出的控制进程终止或暂停的信号。
3.内核需要控制进程的运行而产生的信号。
4.5.2 信号的处理
1. 在进程的任务结构体 task_struct 中有两个成员项用于处理接收的信号:
它们都是位域(Bitmap)形式的 32 位 unsigned long 型变量,每一位(bit)对应一种信号。变量的第 0位对应信号值为 1 的 SIGHUP,第 1 位对应信号值为 2 的 SIGINT,依此类推。
1)Signal:存放进程收到且尚未处理的信号。
2) Blocked:通过将 blocked 中的某一位设置为 1,来屏蔽某种信号的处理。但是有两个不能屏蔽的信号(SIGKILL 和 SIGSTOP)是不能被屏蔽的,blocked 中它们对应的位始终为 0;
2.进程接收到信号后的两种处理方式:
4.5.3 信号处理函数
1.数据结构
2. 处理函数 signal
3.程序例
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。