- 1、本文档共47页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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
您可能关注的文档
- 嵌入式系统电子课件-1 绪论.pptx
- 嵌入式系统电子课件-2.1 交叉开发环境.pptx
- 嵌入式系统电子课件-2.2 Linux开发工具链.pptx
- 嵌入式系统电子课件-2.3 编辑器.pptx
- 嵌入式系统电子课件-2.4 编译器.pptx
- 嵌入式系统电子课件-2.6 调试器.pptx
- 嵌入式系统电子课件-2.7 自动化编译配置文件.pptx
- 嵌入式系统电子课件-3.2 bootloader.pptx
- 嵌入式系统电子课件-3.3 内核编译.pptx
- 嵌入式系统电子课件-3.4 busybox.pptx
- 2025年市国资委党委开展深入贯彻中央八项规定精神学习教育工作方案与开展学习中央八项规定主题教育工作方案(2篇文).docx
- 在2025年市商务局党组研究部署深入贯彻中央八项规定精神学习教育专题会上的讲话稿、教育动员部署会议上的讲话提纲【2篇文】.docx
- 开展2025年学习八项规定主题教育工作方案与领导在局机关深入贯彻八项规定精神学习教育部署会上的讲话稿(两篇文).docx
- 2025年深入贯彻中央八项规定精神学习教育实施方案与全面落实中央八项规定精神情况总结(2篇文).docx
- 2025年落实中央八项规定精神情况总结稿与领导在深入贯彻中央八项规定精神学习教育工作会议的主持讲话稿(2篇文).docx
- 2025年组织部长在八项规定学习教育工作专班座谈会的讲话稿与开展学习中央八项规定主题教育工作方案(两篇文).docx
- 学习2025年深入贯彻中央八项规定精神知识测试题135题【附答案】与全面深入贯彻中央八项规定精神学习教育实施方案.docx
- 2025年县委书记在中央八项规定精神学习教育动员会上的讲话稿遵守党的政治纪律和落实中央八项规定精神情况个人对照检查材料(2篇文).docx
- 2025年在深入贯彻中央八项规定精神学习教育动员部署会上的讲话稿与在市委党的建设工作领导小组会议暨部署深入贯彻中央八项规定精神学习教育专题会讲话稿(两篇文).docx
- 2025年市工业园区党工委开展深入贯彻中央八项规定精神学习教育工作方案与深入贯彻中央八项规定精神学习教育动员部署会讲话提纲【2篇文】.docx
文档评论(0)