[学习笔记]信号基本概念(中断和信号)/名称及常用信号/信号处理/signal函数实践
1基本概念
中断 q 中断是系统对于异步事件的响应 q 中断信号 q 中断源 q 现场信息 q 中断处理程序 q 中断向量表 异步事件的响应:进程执行代码的过程中可以随时被打断,然后去执行异常处理程序 生活中的中断和计算机系统中的中断 1) 无中断生活场景 张三看书,厨房烧水 2)有中断的生活场景 张三看书,设置闹钟,厨房烧水。 闹钟发出中断信号,张三把书合好(第20页),去厨房把开水事情处理好,张三重新打开20页进行阅读。 3)计算机系统的中断场景 中断源发出中断信号,CPU判断中断是否屏蔽屏蔽、保护现场 ,cpu执行中断处理程序, cpu恢复现场,继续原来的任务。 中断向量表保存了中断处理程序的入口地址。 中断个数固定,操作系统启动时初始化中断向量表。 中断有优先级(有人敲门,有人打电话,有优先级) 中断可以屏蔽(张三可以屏蔽电话)。 |
中断分类 q 外部中断是指由外部设备通过硬件请求的方式产生的中断,也称为硬件中断 q 内部中断是由CPU运行程序错误或执行内部程序调用引起的一种中断,也称为软件中断。 q |
信号概念 |
q q q |
信号和中断的区别 q q q q q q q q q |
2信号名称及常用信号
信号名称 描述 SIGABRT 进程停止运行 6 SIGALRM 警告钟 SIGFPE 算述运算例外 SIGHUP 系统挂断 SIGILL 非法指令 SIGINT 终端中断 2 SIGKILL 停止进程(此信号不能被忽略或捕获) SIGPIPE 向没有读者的管道写入数据 SIGSEGV 无效内存段访问 SIGQUIT 终端退出 3 SIGTERM 终止 SIGUSR1 用户定义信号1 SIGUSR2 用户定义信号2 SIGCHLD 子进程已经停止或退出 SIGCONT 如果被停止则继续执行 SIGSTOP 停止执行 SIGTSTP 终端停止信号 SIGTOUT 后台进程请求进行写操作 SIGTTIN 后台进程请求进行读操作 |
实验1: kill –l Man 7 signal 查看信号的默认动作、信号的含义 |
3信号处理
进程对信号的三种相应 q 不采取任何操作、有两个信号不能被忽略:SIGKILL(9号信号)和SIGSTOP。 思考1:为什么进程不能忽略SIGKILL、SIGSTOP信号。(如果应用程序可以忽略这2个信号,系统管理无法杀死、暂停进程,无法对系统进行管理。)。SIGKILL(9号信号)和SIGSTOP信号是不能被捕获的。 q 内核中断正在执行的代码,转去执行先前注册过的处理程序。 q 默认操作通常是终止进程,这取决于被发送的信号。 信号的默认操作:通过 man 7 |
man 7 signal |
编程实践:让应用程序捕捉ctrl+c信号 以ctrl+c 会产生一个中断。当前应用程序捕捉ctrl+c中断信号。 |
4信号signal函数编程实践
signal信号安装函数
signal函数,作用1:站在应用程序的角度,注册一个信号处理函数。 作用2:忽略信号、设置信号默认处理 信号的安装和恢复 q q q q q __sighandler_t q q q q SIG_IGN 屏蔽该信号 SIG_DFL 恢复默认行为 |
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include <unistd.h>
#include<errno.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <signal.h> /*
typedef void (*sighandler_t)(int); sighandler_t signal(int signum,
sighandler_t handler); */ int g_tag = ; __sighandler_t old;
// Linux内核调用这个函数 void myhandle(int num)
{
printf("recv signal id num : %d\n", num);
if ( == num)
{
g_tag = ;
// signal(SIGINT, SIG_DFL);
// signal(SIGINT, old);
}
return;
} int main(void)
{ // 信号的安装 old = signal(SIGINT, myhandle)
if ( signal(SIGINT, myhandle) == SIG_ERR )
{
perror("signal err");
return ;
} if ( signal(SIGQUIT, myhandle) == SIG_ERR )
{
perror("signal err");
return ;
} /*
无效的参数
if ( signal(SIGKILL, myhandle) == SIG_ERR )
{
perror("signal err");
return 0;
}
*/
while(g_tag); return ;
}
[学习笔记]信号基本概念(中断和信号)/名称及常用信号/信号处理/signal函数实践的更多相关文章
- DSP EPWM学习笔记1 - EPWM定时中断
DSP EPWM学习笔记1 - EPWM定时中断 彭会锋 EPWM模块组成 EPWM有7个子模块组成:时间基准 TB.比较功能 CC.动作限定 AQ.死区产生 DB.斩波控制 PC.故障捕获 TZ.事 ...
- JavaScript:学习笔记(2)——基本概念与数据类型
JavaScript:学习笔记(2)——基本概念与数据类型 语法 1.区分大小写.Test 和 test 是完全不同的两个变量. 2.语句最好以分号结束,也就是说不以分号结束也可以. 变量 1.JS的 ...
- es6学习笔记-class之一概念
前段时间复习了面向对象这一部分,其中提到在es6之前,Javasript是没有类的概念的,只从es6之后出现了类的概念和继承.于是乎,花时间学习一下class. 简介 JavaScript 语言中,生 ...
- Docker:学习笔记(1)——基础概念
Docker:学习笔记(1)——基础概念 Docker是什么 软件开发后,我们需要在测试电脑.客户电脑.服务器安装运行,用户计算机的环境各不相同,所以需要进行各自的环境配置,耗时耗力.为了解决这个问题 ...
- OpenFlow Switch学习笔记(一)——基础概念
OpenFlow Switch v1.4.0规范是在2013年10月14号发布,规范涵盖了OpenFlow Switch各个组件的功能定义.Controller与Switch之间的通信协议Open F ...
- Nginx网络架构实战学习笔记(一):Nginx简介、安装、信号控制、nginx虚拟主机配置、日志管理、location 语法、Rewrite语法详解
文章目录 nginx简介 nginx安装 nginx信号控制 nginx虚拟主机配置 日志管理 location 语法 精准匹配的一般匹配 正则匹配 总结 Rewrite语法详解 nginx简介 Ng ...
- 【miscellaneous】 GStreamer应用开发手册学习笔记之基础概念介绍
第3章. 基础概念介绍 本章将介绍GStreamer的基本概念. 理解这些概念对于你后续的学习非常重要,因为后续深入的讲解我们都假定你已经完全理解了这些概念. 3.1. 元件(Elements) 元件 ...
- (1)《Head First HTML与CSS》学习笔记---HTML基本概念
前言: 1. 这本书并没有面面俱到,涵盖所有内容,只提供作为初学者真正需要的东西:基本知识和信心.所以这不是唯一的参考书.(我买了一本<HTML5权威指南>作为参考书和这本一起看, ...
- 自然语言处理NLP学习笔记一:概念与模型初探
前言 先来看一些demo,来一些直观的了解. 自然语言处理: 可以做中文分词,词性分析,文本摘要等,为后面的知识图谱做准备. http://xiaosi.trs.cn/demo/rs/demo 知识图 ...
随机推荐
- 还是畅通工程(peime算法最小生成树)
个人心得:就是最小生成树的运用,还是要理解好每次都是从已搭建好的生成树里面选择与她的补集中最短距离,所以那个book数组的更新 需要好生体会.不过还是有缺陷,算法的复杂度为O(n^2),看介绍说用优先 ...
- ACM学习历程—SNNUOJ1213 加油站问题(动态规划 || 数学)
题目链接:http://219.244.176.199/JudgeOnline/problem.php?id=1213 这是这次微软实习面试的一道题,当时只相出了一个2n的做法,面试官让我优化成n的做 ...
- Unity3D的SystemInfo类,用于获取运行设备硬件信息(CPU、显卡、类型等)
SystemInfo类中的静态变量: 中文显示: Rendering.CopyTextureSupport copyTextureSupport:(只读)支持多种复制纹理功能的情况. string ...
- C# 使用API检查域用户名和密码是否正确
添加引用: using System.Runtime.InteropServices; public class VerifyUserByDomain { ; ; ); [DllImport(&quo ...
- 前端跨域问题,以及ajax,jsonp,json的区别
看了很多网上的资料,小七感觉都没有完全解决我的疑惑以及问题,所以特意拿出通俗易懂的话讲解跨域问题,以及ajax,jsonp,json的区别.首先先说跨域问题什么时候需要跨域?[1]域名不同(即网址不同 ...
- 洛谷【P2629】好消息,坏消息
浅谈队列:https://www.cnblogs.com/AKMer/p/10314965.html 题目传送门:https://www.luogu.org/problemnew/show/P2629 ...
- Azure VM的加速网络
Azure的VM在经过几代发展后已经有多种硬件类型.目前Azure China的多种机型都配置了FPGA卡,可以实现网络加速.本文将介绍Azure的加速网络相关的内容. 一. 加速网络的硬件准备 下图 ...
- 如何在IJ中使用Jaxb2通过xml定义生成对应的Java Entity类的文件
#0. 准备要转换的xml文件,在Project视界中,右击这个xml文件,在弹出的菜单上选择“Generate XSD schema from XML File...”, 按默认设置生成xsd文件. ...
- sass和less、stylus语法(2)
6.运算符(Operations)CSS预处理器语言还具有运算的特性,其简单的讲,就是对数值型的Value(如:数字.颜色.变量等)进行加减乘除四则运算.这样的特性在CSS样式中是想都不敢想的,但在C ...
- 3D柜体导出CAD优化参考方案
前言: 近期在做系统柜和衣柜导出CAD的工作,现阶段的工作是根据不同的厂商定制不同的CAD导出,其中房间平面图.顶脚线截面图.柜体立面图.侧视图.平面图.门板图等模块功能都基本固定,不同的是不同厂商的 ...