Linux系统编程(第四章) 信号量.pdf
上传人:qw****27 上传时间:2024-09-12 格式:PDF 页数:23 大小:259KB 金币:15 举报 版权申诉
预览加载中,请您耐心等待几秒...

Linux系统编程(第四章) 信号量.pdf

Linux系统编程(第四章)信号量.pdf

预览

免费试读已结束,剩余 13 页请下载文档后查看

15 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

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