




下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
信号在我们的生活中随处可见,如:古代中摔杯为号;现代中的信号弹;体育比赛中使用的信号枪他们都有共性:1.简单2.不能携带大量信息3.满足某个特设信号是信息的载体,Linux/UNIX通信。Unix早期版本就提供了信号机制,但不可靠,信号可能丢失。BerkeleyAT&T都对信号模型做了更改,增加了可靠信号机制。但彼此不兼容。POSIX.1对可靠信号例程进行了标AB发送信号,B收到信号之前执行自己的代码,收到信号后,不管执行到程序的什与信号相关的和状产生信号硬件异常产生,如:内存(段错误)、除0(浮点数例外)、内存对齐出错命令产生,如:kill命令未决:产生和递达之间的状态。主要由于阻塞()导致该状态。,未决信号集1,表信号处于未决状态。0。这一时刻往往非常短暂。号集。在解除前,信号一直处于未决状态。1)2)3)4)5)6)7)8)9)10)11)12)13)14)15)16)17)18)19)20)21)22)23)24)25)26) 27)SIGPROF28)SIGWINCH29)SIGIO30)31) 34)SIGRTMIN35) 36) 37)38)SIGRTMIN+4 39)SIGRTMIN+5 40)SIGRTMIN+6 41)SIGRTMIN+7 43)SIGRTMIN+9 44)SIGRTMIN+1045)SIGRTMIN+1146)SIGRTMIN+1247)48)SIGRTMIN+1449)SIGRTMIN+1550)SIGRTMAX-1451)SIGRTMAX-1352)53)SIGRTMAX-1154)SIGRTMAX-1055)SIGRTMAX-9 56)SIGRTMAX-8 58)SIGRTMAX-6 59)SIGRTMAX-5 60)SIGRTMAX-4 61)SIGRTMAX-3 64)41.编号2.名称3.4.默认处理动可通过man7signal/usr/src/linux-headers-3.16.0- Hangupdetectedoncontrollingterminalordeathcontrolling Interruptfrom Quitfrom Illegal Floatingpoint Kill Invalidmemory Brokenpipe:writetopipewithno Timersignalfrom User-definedsignal Childstoppedor Continueif Stop Stoptypedat Terminalinputforbackground ThesignalsSIGKILLandSIGSTOPcannotbecaught,blocked,orValuex86、armmips架构。一个‘-’表示在对应Unix系统内,也出现在Linux中,而有的信号出现在BSDMacOSLinux下。这里我们只研究Linux系统中的信号。Ign(默认即时对该种信号忽略操作Core:终止进程,生成Core文件。(查验进程原因,用于gdb调试)man7signalThesignalsSIGKILLandSIGSTOPcannotbecaught,blocked,orignored.9)SIGKILL19)SIGSTOP信号,不允许忽略和捕捉,只能执行默认动LinuxSIGHUP:当用户退出s 时,由该s SIGABRT:abortcore::0等所有的算法错误。默认动作为终止进程并产生coreSIGUSE1SIGALRM:alarm来要示程序正常退出。执行s 命令Kill时,缺省产生这个信号。默认动作为终止进程。SIGTTOU:该信号类似于SIGTTIN,在进程要向终端输出数据时发生。默认动作SIGXCPUCPUSIGVTALRMSIGALRM,但是该信号只计算该CPU的使用时间。默认动作为终止进程。SGIPROFSIGVTALRMCPU时间还包括执行系统调34SIGRTMIN~(64SIGRTMAX:LINUX的实时信号,它们没有固定的含义(可以由用Ctrl+ →2)SIGINT(终止/中断) Ctrl 20SIGTSTP(暂停/停止)"TTerminalCtrl 3SIGQUIT(退出除0操作 →8)SIGFPE(浮点数例外) "F"float浮点数。内存→11)SIGSEGV(段错误)总线错误7kill函数/kill命令产生信号:killSIGKILLintkill(pid_tpid,intsig);成功:0;失败:-1(ID,信号,普通用户杀init进程等权级问题)errnopid pid killpid IDID相同。kill9(rootpid)是不可以的。同样,普通用户也不能向其他普通用户发送ID==IDraiseabortraise函数:给当前进程发送指定信号(自己给自己发)raise(signokill(getpidsigno);intraise(intsig);成功:00值abort6SIGABRTcorevoidabort(void);alarm函unsignedintalarm(unsignedintseconds);0或剩余的秒数,无失败。alarm(0),返回旧闹钟余下秒数。例:alarm(5)3secalarm(4)5secalarm(5)论进程处于何种状态,alarm都计时。
【alarmc使用time命令查看程序执行的时间 =++setitimer函设置定时器(闹钟)alarmusintsetitimer(intwhich,conststructitimerval*new_value,structitimerval*old_value); 功:0;失败:-1errno①自然定时:ITIMER_REAL→ 计算自然时间②虚拟空间计时(用户空间):ITIMER_VIRTUAL→26)SIGVTALRM 占用cpu的时间③运行时计时(用户+内核):ITIMER_PROF→27)SIGPROF 计算占用cpu及练习:setitimeralarm1manpageit_interval、it_value提示:it_interval:用来设定两次定时任务之间间隔的时间。00内核通过未决信号集来判断信号是否应被处理。字mask可以影响未决信号集。而我们可以在应用程序中自定义set来改变mask。已达到指定信号的目的。 //typedefunsignedlongintsigemptyset(sigset_t*set); 将某个信号集清0 intsigfillset(sigset_t*set); 将某个信号集置1 intsigaddset(sigset_t*set,intsignum); intsigdelset(sigset_t*set,intsignum); intsigismember(constsigset_t*set,intsignum);判断某个信号是否在信号集中 sigset_t类型的本质是位图。但不应该直接使用位操作,而应该使用上述函数,保证跨selectsigprocmask用来信号解除也使用该函数其本质或修改进程的字(PCB中)intsigprocmask(inthowconstsigset_t*setsigset_t 成功:0;失败:-1how参数取值:假设当前的字为SIG_BLOCK:当how设置为此值,set表示需要的信号。相当于=SIG_UNBLOCK:当how设置为此,set表示需要解除的信号。相当mask=mask&SIG_SETMASK:当how设置为此,set表示用于替代原始集的新mask=setsigprocmask解除了对当前若干个信号的阻sigprocmask返回前,至少将其中一个信号递达。sigpendingintsigpending(sigset_t*set);set传出参数 signaltypedefvoidsighandler_tsignal(intsignum,sighandler_tANSIUnixLinux中可能有不同的行为。因此应该尽量避免使用它,取而代之使用sigaction函数。void(*signal(intsignum,void(*sighandler_t)(int)))typedefsigactionintsigaction(intsignum,conststructsigaction*act,structsigaction*oldact); 败:-1errnostructsigactionstructsigaction (*sa_sigaction)(int,siginfo_t*,void*); 用①sa_handler:指定信号捕捉后的处理函数名(即函数)。也可赋值为SIG_IGN表忽略或SIG_DFL表执行默认动作②sa_mask:调用信号处理函数时,所要的信号集合(字)。注意:仅在处理函数被调用期间生效,是临时性设置。③sa_flags0,表使用默认属性。练习:sigactionsetitimer产生的中断信号.信号捕捉特进程正常运行时,默认PCB中有一个字,假定为☆,它决定了进程自动屏XXX信号捕捉函数执行期间,XXX信号自动被阻塞的常规信号不支持排队,产生多次只记录一次(32个实时信号支持排队)1:为某个信号设置捕捉函数么只在处理函数之行结束后,处理一次。【sigaction2.c】练习3:验证sa_mask在捕捉函数执行期间的作用。 SIGCHLDSIGCHLDSIGCHLD#include<stdio.h>#include<stdlib.h>#include<unistd.h>#include<sys/wait.h>#include<signal.h>voidsys_err(char{}voiddo_sig_child(int{int pid_twhile((pid=waitpid(0,&status,WNOHANG))>0){if(WIFEXITED(status))printf("child%dexit%d\n",pid,WEXITSTATUS(status));elseif(WIFSIGNALED(status))printf("child%dcancelsignal%d\n",pid,}}int{pid_tpid; inti;for(i=0;i<10;i++){if((pid=fork())==0)elseif(pid<}if(pid==0)intn=1;while(n--){printf("childID%d\n",getpid());}return}elseif(pid>0)structsigactionact;act.sa_handler=do_sig_child;act.sa_flags=0;while(1)printf("ParentID%d\n",getpid());}}return}17)SIGCHLD如果每创建一个子进程后不使用sleepwhileif
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 追责权利协议书
- 男士离婚协议书
- 美妆学徒协议书
- 广告带制作合同协议书
- 小产权买卖合同协议书
- 旧改房买卖合同协议书
- 苹果充电协议书
- 空调经销协议书
- 房屋翻改造合同协议书
- 合建自建房合同协议书
- 幼儿园中班科学活动公开课《飞机本领大》课件
- 体育竞彩考试题及答案
- 中国日用器皿行业市场前景预测及投资价值评估分析报告
- 2025年企业人力资源管理师考试真题及答案
- 2025-2030年中国玻璃容器行业市场发展趋势与前景展望战略分析报告
- 山东省济南市2025届高三三模化学试卷(含答案)
- 延长县黑家堡共大滩防洪工程环境影响评价报告书
- 2022年新高考全国I卷数学真题
- 一氧化氮和二氧化氮检测仪校准规范
- 2025中考英语解题技巧专题10.阅读表达解题技巧(学生版+解析)
- 山西、陕西、宁夏、青海四省区普通高中新高考2025届高三质量检测 数学试题(含解析)
评论
0/150
提交评论