欢迎来到天天文库
浏览记录
ID:34643846
大小:259.84 KB
页数:23页
时间:2019-03-08
《linux系统编程(第四章) 信号量》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第四章:信号目标:本章旨在向学员介绍Linux系统时间:2学时下关于信号的使用及功能:教学方法:讲授PPT、1)掌握信号的主要作用实例练习2)掌握信号在编程当中的使用4.1信号与信号处理信号是系统响应某些条件而产生的一个事件作用作用,也可以作为在进程间传递消息或修改行为的一种方式信号可以从内核发到进程,也可以从进程发方式方式到进程因为信号本身的特点,它更多的用于处理一特点特点些非正常情况而不是在两个进程之间做数据交换4.1信号signal信号在进程中的应用:1信号处理2阻塞信号3发送信号给另一个进程4.1信号•相关系统
2、调用signal简单的信号处理sigaction指定一个信号的处理函数sigprocmask修改当前的信号挡板kill向一个进程发送信号alarm设置发送信号的计时器4.1信号信号定义:SIGABORT处理异常信号SIGALRM报时时钟SIGBUS总线错误SIGCHLD子进程被终止或停止SIGCONT继续执行信号SIGFPE浮点异常SIGHUP挂起信号SIGILL非法指令信号SIGINT中断信号SIGKILL杀死信号SIGPIPE非命名管道和套接字信号SIGPOLL轮询事件信号SIGPROFprofiling时间超时信
3、号4.1信号信号定义:SIGQUIT退出信号SIGSEGV非法内存引用信号SIGSTOP停止进程执行信号SIGSYS非法系统调用信号SIGTERM软件终止信号SIGTRAP跟踪陷阱信号SIGTSTP终端终止信号SIGTTIN后台进程读取信号SIGTTOU后台进程写入信号SIGURG高带宽数据通知信号SIGUSR1和SIGUSR2用户自定义信号SIGVTALRM虚拟时钟超时信号SIGXCPUCPU时间限制溢出信号SIGXFSZ文件大小限制溢出信号4.1信号•kill函数进程通过调用kill函数向包括它本身在内的其他进程发
4、送一个信号#include#includeintkill(pid_tpid,intsig);sig参数:发送给pid进程的信号kill调用失败时会返回-1并设置errno变量4.2信号signal•信号处理进程接受信号后,有三种方法来处理所接收到的信号1接受默认动作,一般是终止进程2彻底忽略信号的发生,并继续执行程序3接受用户自定义的默认动作,调用函数4.2信号signal•signal函数用来处理信号#includevoid(*signal(intsi
5、g,void(*func)(int)))(int);sig参数:准备捕获或忽略的信号func参数:接受到指定的信号后要调用的函数int参数:接受到的信号代码SIG_DFL终止进程SIG_IGN忽略信号4.2信号signal实验:信号处理#include#include#includevoidouch(intsig){printf(“OUCH!–Igotsignal%d”,sig);signal(SIGINT,SIG_DFL);}intmain(){signa
6、l(SIGINT,ouch);while(1){printf(“HelloWorld!”);sleep(1);}}4.2信号signal•alarm函数信号提供的闹钟功能,通过alarm函数在经过预定的时间后发送一个SIGALRM信号#includeunsignedintalarm(unsignedintseconds);4.2信号signalalarm例程:voidwakeup(){//printf("Alarmreceivedfromkernel");}intmain(){printf(
7、"abouttosleepfor4second");signal(SIGALRM,wakeup);alarm(4);pause();printf("Morningsosoon?");}4.2信号signal练习:编写sleep功能函数4.2信号signalsignal方式的缺点:•无法获知信号被发送的原因•处理函数过程中无法阻塞其他消息4.3信号sigaction•sigaction系统调用:功能为设置信号处理动作#includeintsigaction(intsigno,conststru
8、ctsigaction*act,structsigaction*oact);参数signo指定需要处理的特定信号参数act设定signo信号的处理动作参数oact返回的是此信号的当前设置值4.3信号sigaction•structsigactionvoid(*sa_handler)();旧有的信号处理void(*sa_sigact
此文档下载收益归作者所有