UC-day09中断,信号函数.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
UC-day09中断,信号函数

----------------------------------------------- 今天内容: (1)中断的概念 (2)信号的概念和函数 2 3 7 9 11 1.中断 (1)概念 表示暂时停止当前程序的执行,转而执行新的程序或者处理意外情况的过程 (2)分类 中断分为:硬件中断 和 软件中断 ctrl+c 段错误 2.信号的概念和函数 2.1 信号的初识 (1)概念 信号就是软中断,信号既可以作为进程间的一种通信方式,也可以中断一个正在执行的程序,所以更多地用于处理意外情况 (2)特点 a. 信号是异步的 b. 进程既可以处理信号,也可以发送信号给指定的进程 c. 每个信号都有一个名字,这些名字以SIG开头 如: ctrl+c 是:SIGINT 值为:2 2.2 信号的命令和分类 (1)命令 kill -l = 表示查看当前操作系统中的所有信号(小括号里面是信号的值) 掌握的信号: ctrl+c 信号2 SIGINT 默认处理是 终止进程 ctrl+\ 信号3 SIGQUIT 默认处理是 终止进程 kill -9 信号9 SIGKILL 不允许被捕捉,终止进程 总线错误 信号7 SIGBUS 段错误 信号11 SIGSEGV 其他信号: (2)分类 一般来说,linux系统中信号1~64,不保证连续,unix系统的信号和linux系统可能有所不同, unix系统中的信号一般是1~48 以linux系统为例,做以下分类: 1~31 叫做不可靠信号,信号可能丢失,不支持排队(可能会出现插队的情况),又叫做非实时信号 34~64叫做可靠信号,信号不会丢失,支持排队,又叫做实时信号 2.3 信号的处理方式 (1)默认处理,绝大多数都是终止进程 (2)忽略信号 (3)自定义处理信号,通过自定义函数进行处理 注意: a.信号9只能进行默认处理,不能忽略,也不能进行自定义处理 b.信号的发送受到用户的限制,一般来说,每个用户只能给自己的进程发信号,root用户可以给所有进程发信号 2.4 信号的处理函数 #include signal.h typedef void (*sighandler_t)(int);//给函数指针其别名,给*sighandler起别名 sighandler_t signal(int signum, sighandler_t handler); 解析: typedef void (*)(int) sighandler_t; void (*)(int) signal(int signum, void (*)(int) handler); =void (*)(int) signal(int signum, void (*handler)(int)); =void (*signal(int signum, void (*handler)(int)))(int) 综上所述: =signal是个函数 =函数的第一个参数是int类型的(信号值),第二个参数是函数指针类型的(处理方式) =函数的返回值是函数指针类型的 =函数指针是一个指向参数为int,返回值为void的函数 函数的使用: 函数功能:设置指定信号的处理方式 第一个参数:表示信号值/信号名称,int类型的 第二个参数:对信号的处理方式,函数指针类型的 SIG_IGN - 忽略 SIG_DFL - 默认处理 函数地址 - 调用指定的函数进行自定义处理 返回值:成功返回之前的处理方式,失败返回SIG_ERR 例子: //signal函数的使用 #include stdio.h #include stdlib.h #include signal.h #include unistd.h #include sys/types.h void fa(int signo){ printf(捕获到了信号%d\n,signo); signal(“3,SIG_DFL”);//信号第一次是自定义处理,信号第二次是默认处理 } int main(void){ //设置对信号2的处理方式为忽略,注意是终端发送信号(bash) signal(2,SIG_IGN); //设置对信号3,进行自定义处理 signal(SIGQUIT,fa); //设

文档评论(0)

yy558933 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档