网站大量收购独家精品文档,联系QQ:2885784924

嵌入式系统电子课件-6.1 信号.pptx

嵌入式系统电子课件-6.1 信号.pptx

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

信号

信号信号是UNIX/Linux系统响应某些条件而产生的一个事件。接收到该信号的进程会相应的采取一些行动。信号可能是由于某些错误条件而产生,例如内存段冲突、浮点运算错误、非法指令等,也可以作为由程序控制,明确的由一个进程发送给另一个进程。信号可以被生成、捕获、响应和(至少对某些信号可以被)忽略

信号的定义信号在头文件signal.h中定义,均以SIG开头信号名称说明SIGABORT*进程异常中止SIGALRM超时警告SIGFPE*浮点运算异常SIGHUP连接挂断SIGILL*非法指令SIGINT终端中断

信号的定义(续)SIGKILL终止进程(此信号不能被捕捉或忽略)SIGPIPE向无读进程的管道写数据SIGQUIT终端退出SIGSEGV*无效内存段访问SIGTERM终止SIGUSR1用户定义信号之一SIGUSR2用户定义信号之二

其他一些信号信号名称说明SIGCHLD子进程已经停止或退出SIGCONT继续执行暂停进程SIGSTOP停止执行(此信号不能被捕捉或忽略)SIGTSTP终端挂起SIGTTIN后台进程尝试读操作SIGTTOU后台进程尝试写操作

在shell中发送信号当在键盘上敲入中断字符(ctrl+c),就会向前台进程发送SIGINT信号,终止该程序的执行,除非事先捕获了它。如果想发送信号给不处于前台的进程,应使用kill命令。向运行着同一个程序的进程发送信号,使用killall命令。

系统对信号的响应进程接收到信号之后,如果事先没有安排捕获它,进程将会执行默认动作。终止忽略暂停继续执行(SIGCONT)

杀死同一程序的不同进程

信号的定义signalkillsigactionsigaddsetsigemptysetsigfillsetsigdelset

程序可以用signal库函数来处理信号:signal是一个带有sig和func两个参数的函数,准备捕获或忽略的信号由参数sig给出,接收到指定的信号后将要调用的函数由func给出。信号处理函数必须有一个int类型参数(即接收到的信号代码),并且返回值为void*。signal函数本身也返回一个同类型的函数(指针),即先前用来处理这个信号的函数。0101信号处理函数#includesignal.hvoid(*signal(intsig,void(*func)(int)))(int);

程序可以用signal库函数来处理信号:func取值也可为下列两个宏:SIN_IGN:忽略信号SIG_DFL:恢复默认行为上述两个宏的定义:#defineSIG_IGN(void(*)())1#defineSIG_DFL(void(*)())00101信号处理函数#includesignal.hvoid(*signal(intsig,void(*func)(int)))(int);

理解signal函数的类型整型变量-返回值为整型的函数。函数指针变量-返回值为函数指针的函数。inta;inta();void(*signal)(int);void(*signal(intsig,void(*func)(int)))(int);

理解signal函数的类型(续)首先定义一个函数类型用此函数类型定义一个函数ftypedefvoidsigfunc(int);sigfuncf;voidf(int);

理解signal函数的类型(续)把f替换为*signal(intsig,sigfunc*func)把f替换为*signal(intsig,sigfunc*func)sigfunc*signal(intsig,sigfunc*func)void(*signal(intsig,void(*func)(int)))(int);

signal举例编写程序signal.c,它将响应用户敲入的组合键ctrl+c,在屏幕上打印出一条适当的消息,而不是终止程序,当用户第二次再按下此组合键时,终止程序。

#includesignal.h#includestdio.h#includeunistd.hvoidsig_alarm(intsig){ printf(---thesignalreceivedis%d.\n,sig); signal(SIGINT,SIG_DFL);}信号程序举例~/exp/step/signal1.c

intmain(){ signal(SIGINT,sig_alarm); while(1) { printf(waitinghere!\n); sleep(1); } return0;} 信号程序举例

运行结果

#includesignal.h#includestdi

您可能关注的文档

文档评论(0)

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

计算机二级持证人

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

领域认证该用户于2024年11月02日上传了计算机二级

1亿VIP精品文档

相关文档