信号是类Unix系统中的一种通知机制。在Linux下,我们可以通过kill -l命令来查看有哪些信号。Linux下有64个信号,其中前32个信号是经典信号,后32个是用于驱动开发要用到的。

那么信号是如何产生的呢?主要有以下几种方式可以产生信号:

1.终端的特殊按键。比如说ctrl + d,ctrl + c等

2.kill 命令及函数。

3.硬件异常。如:非法访问内存,除零操作。

4.某些软条件已经发生。如:定时器alarm到时。

我们已经知道了信号是如何产生的,那么进程是如何对这些进程进行处理的呢?Linux系统对这些经典信号提供了3种处理方式。

第一种是默认处理方式。在默认处理方式下,信号有5种默认的动作,Term,Ign,Core,Stop,Cont,以下是它们的说明:

1.Term:终止当前进程

2.Ign:忽略该信号

3.Core:终止当前进程并且产生Core文件(用于调试用的)

4.Stop:暂停当前进程

5.Cont:继续执行先前暂停的进程

第二种是忽略该信号。注意这里的忽略和第一种情况下的Ign所在的层级是不一样的。

我们先来看下信号是如何响应的,在Linux的进程内核空间中,有两个信号集,一个是未决信号集,只能被内核进行读写,用户不能去修改它,但能去读它。还有一个是信号屏蔽字,这个用户可以设置它。当有信号产生时,未决信号集里刚产生的那个信号位会被内核自动设置为1,表示该信号产生了。接下来,如果信号屏蔽字中对应的信号屏蔽字位为0,说明该信号没有被屏蔽,可以去执行信号的动作。若被屏蔽了,则该信号不能被响应,直到屏蔽字位为0。当执行完该信号的动作后,内核会将该信号的未决信号位设置为0。我们有几个函数来对信号集进行设置,sigemptyset(将信号集全部置0),sigfillset (信号集置1),sigaddset (某一位置1),sigdelset (某一位0),sigismember (判断某一位是否为1),还有调用函数sigprocmask可以读取或更改进程的信号屏蔽字。

介绍了信号集,我们来看下第三种处理方式。第三种是自定义信号处理。我们可以通过sigaction函数来设置信号的处理动作。该函数的第二个参数是一个名为struct sigaction 的结构体,其声明如下:

struct sigaction {

void (*sa_handler)(int);//信号处理函数。早期版本的

void (*sa_sigaction)(int, siginfo_t *, void *);//信号处理函数,若使用这个就不能使用上一个,这个成员和上一个成员是互斥的,只能使用同一个

sigset_t sa_mask;//临时的信号屏蔽字,通过该成员可以设置其它信号的屏蔽位,执行完处理函数后,返回原有的信号屏蔽字

int sa_flags;//选择使用哪个信号处理函数,0表示使用早期版本的,SA_SIGINFO表示使用第二种

void (*sa_restorer)(void);//保留的,没有用

};以下是该函数的使用示例:

#include #include void do_sig(int num)

{

//会打印该信号的编号

printf("num = %d\n",num);

}

int main(void)

{

struct sigaction act;

//设置信号处理函数

act.sa_handler = do_sig;

//将临时信号屏蔽字全设置为0

sigemptyset(&act.sa_mask);

act.sa_flags = 0;

//设置SIGINT信号使用自定义处理该信号

sigaction(SIGINT,&act,NULL);

while(1)

{

printf("*********\n");

sleep(1);

}

return 0;

}

linux信号处理编程实验报告,Linux编程之信号处理相关推荐

  1. linux shell程序设计实验报告,linux的shell脚本实验报告

    <linux的shell脚本实验报告>由会员分享,可在线阅读,更多相关<linux的shell脚本实验报告(7页珍藏版)>请在人人文库网上搜索. 1.第二次实验内容一.实验名称 ...

  2. linux文件目录操作实验报告,Linux操作系统实验4文件和目录操作

    <Linux操作系统>课程实验报告 实验4 文件和目录操作 一.实验目的 1.理解Linux文件系统的结构和目录组织方式: 2.掌握Linux常用目录和文件命令的使用. 二.实验内容与要求 ...

  3. linux使用环境实验报告,Linux 及其使用环境实验报告.doc

    计算机语言与程序设计上机实验报告 学号: 姓名: 所在系: 班级: 实验名称: 实验1 Linux 及其使用环境 实验日期 实验指导教师 实验机房及机号 ----------------------- ...

  4. linux系统进程控制实验报告,Linux进程控制实验报告.doc

    里奴性进程控制实验报告 实验名称: Linux进程控制 实验要求:一.编写一个Linux系统C程序,由父亲创建2个子进程,再由子进程各自从控制台接收一串字符串,保存在各自的全局字符串变量中,然后正常结 ...

  5. 熟悉linux操作系统的使用实验报告,Linux系统的熟悉与使用操作系统实验报告

    Linux系统的熟悉与使用操作系统实验报告 实验一 Linux系统熟悉与使用 Linux有两种不同的含义.从严格的技术定义讲,Linux指的是开放源代码的Unix类操作系统的内核.然而,目前大多数人用 ...

  6. 实验四 linux进程控制实验报告,Linux系统进程控制操作系统实验报告4

    实验课程名称:操作系统 实验项目名称Linux系统进程控制实验成绩 实验者专业班级组别 同组者实验日期年月日第一部分:实验分析与设计(可加页) 实验内容描述(问题域描述) 要求:掌握Linux系统中进 ...

  7. linux多线程编程实验报告,Linux多线程编程

    8种机械键盘轴体对比 本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选? 使用pthread_create函数创建线程.1 2 3 4 5 6 7 8int (pthread_t *__rest ...

  8. linux系统文件查找实验报告,Linux 文件查找与打包

    Linux运维与DevOps实战-实验7 一.find # find 命令在目录层次下搜寻查找一个文件 # 并且会打印所找到文件的有关信息 # 语法 find [path...] [expressio ...

  9. linux dhcp配置实验报告,Linux DHCP服务器配置实验报告.doc

    实验一 DHCP服务器配置 实验课程名:Red Hat Enterprise Linux系统管理 专业班级: 学号: 姓名: 实验时间: 实验地点: 指导教师: 一.实验目的 (1) 掌握Linux下 ...

最新文章

  1. OpenCV中的快速特征检测——FAST(Features from Accelerated Segment Test)
  2. 声波配网:通过特定的声波序列将wifi密码发到无屏幕的设备上
  3. python编程主要干嘛的-让孩子学了Python编程有什么用
  4. 在IIS中写Python的CGI脚本
  5. 讲几种Python包的安装方式
  6. linux socket bind 内核详解,Socket与系统调用深度分析(示例代码)
  7. 将读写锁放到共享内存,实现进程之间对于同一文件的读写操作
  8. “康园圈--互联网+校园平台“项目之拓展手机客户端
  9. 基于vue+node的校园交流平台
  10. MSDN精选:Lambda 表达式(C# 编程指南)
  11. mongodb创建local库用户_MongoDB 在系统数据库local上无法创建用户的解决方法
  12. hdu 5335 Walk Out(bfs+斜行递推) 2015 Multi-University Training Contest 4
  13. 记字符编码与转义符的纠缠
  14. sd卡写保护解除工具_手把手教你快速解除vivo手机高通系列屏幕锁(附短接拆机小视频)...
  15. SQL Server 2008 R2安装
  16. VB6.0 组织json对象并生成json字符串
  17. C 修改内存制作外挂
  18. 查看nvidia gpu共享内存大小
  19. CDA数据分析师3个级别的薪资待遇|人才认证标准
  20. 直播预告 | NeurIPS 专场六 青年科学家专场

热门文章

  1. db2 日期英式写法_《学霸英语》16:美国人和英国人“表达日期”,差距竟然这么大!...
  2. 本地html app跨域,本地webapp是怎么解决跨域问题的?
  3. osfmount 命令加载虚拟光驱_OSFMount挂载虚拟磁盘工具下载
  4. mybatis plus 使用函数_这些Mybatis-Plus使用技巧,太火了
  5. 基于单片机的水壶自动加热系统_基于单片机的智能热水壶设计说明
  6. 如何入门Go语言?这个开源项目赶紧收藏!
  7. 最最最全面的Java异常面试及解答
  8. 实用 | 宝藏男孩教你如何魔改 Grafana 主题!
  9. 8月最新阿里技术栈架构资料
  10. 想通关「限流」?只要这一篇