版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、进程软中断通信【预备知识】进程软中断通信涉及的系统调用描述如下。1kill()进程用kill()向一个进程或一组进程发送一个信号。系统调用格式为int kill(pid,sig)。其中,pid是一个或一组进程的标识符,sig是要发送的软中断信号。信号的发送分如下三种情况。pid0时,核心将信号发送给进程pid。pid=0时,核心将信号发送给与发送进程同组的所用进程。pid=-1时,核心将信号发送给所有用户标识符真正等于发送进程的有效用户标识号的进程。2.signal(sig,function)接收信号的程序用signal()来实现对处理方式的预置,允许调用进程控制软中断信号。系统调用格式为si
2、gnal(sig function),此时需包含头文件signal.h。其中,sig用于指定信号的类型,sig为0则表示没有收到任何信号,其余类型如表所示。调用函数使用如下头文件:#include参数定义如下:signal (sig,function)int sig;void(*func) (); function是该进程中的一个函数地址,在核心返回用户态时,它以软中断信号的序号作为参数调用该函数,对除了信号SIGKILL、SIGTRAP和SIGPWR以外的信号,核心自动重新设置软中断信号处理程序的值为SIG_DFL,进程不能捕获SIGKILL信号。function的解释如下:(1)funct
3、ion=1时,进程对sig类信号不做任何处理便立即返回,亦即屏蔽该类型号。(2)function=0时,默认值,进程收到sig信号后终止自己。(3)function为非0、非1类整数时,执行用户设置的软中断处理程序。信号的类型值名字说明01SIGHUP挂起(hangup)02SIGINT中断,当用户从键盘按“c”键或“break”键时03SIGQUIT退出,当用户从键盘按“quit“键时04SIGILL非法指令05SIGTRAP跟踪陷阱(trace trap)06SIGIOTIOT指令07SIGEMTEMT指令08SIGFPE浮点运算溢出09SIGKILL终止进程10SIGBUS总线错误11S
4、IGSEGV段违例,进程试图去访问其虚地址空间以外的位置12SIGSYS系统调用中参数错,如系统调用号非法13SIGPIPE向某个非读管道中写入数据14SIGALRM闹钟。当进程希望在某时间后接收信号时发此信号15SIGTERM软件终止(software termination)16SIGUSR1用户自定义信号117SIGUSR2用户自定义信号218SIGCLD某个子进程死19SIGPWR电源故障编程实现例【任务】编程实现,父进程生成子进程,父进程发送信号并等待,子进程接收信号并完成某种功能,然后自我终止并唤醒父进程。【程序】#include #include #include int fun
5、c();main() int i,j;signal(17,func);if(i=fork() printf(“Parent: Signal 17 will be send t to Child! n ”)kill(i,17);wait(0);printf (“Parent: finished! n”);elsesleep(10);printf(“Child: A signal from my Parent is received ! n”);exit();func()printf(“It is signal 17 processing function ! n”)【运行结果】【分析】编程实现例
6、【任务】编制一程,使用系统调用fork()创建两个子进程,再用系统调用signal()让父进程捕捉键盘上来的中断信号(即DEL键),当捕捉到中断信号后,父进程用系统调用kill()向两个子进程发出信号,子进程捕捉到信号后,分别输出下列信息后终止。child process 1 is killed by parent!child process 2 is killed by parent!父进程等待两个子进程终止后,输出以下信息后终止。Parent process is killed!【程序】#include #include #include int waiting(),stop();int
7、wait_mark;main() int p1,p2;while (p1=fork()=-1);if (p10) while (p2=fork()=-1); if (p20) printf(“parentn”); wait_mark=1; signal(SIGINT,stop); /*接收DEL信号,并转stop()*/ waiting(); kill(p1,16); /*向P1发中断信号16*/ kill(p2,17); /*向P2发中断信号17*/ wait(0); wait(0); printf(“parent process is killed!n”); exit(0) else pr
8、intf(“p2n”); wait_mark=1; signal(17,stop) waiting(); lockf(stdout,1,0); printf(“child process 2 is killed by parent!n”); lockf(stdout,0,0); exit(0); else printf(“p1n”); wait_mark=1; signal(16,stop) waiting(); lockf(stdout,1,0); printf(“child process 1 is killed by parent!n”); lockf(stdout,0,0); exit
9、(0); void waiting() while (wait_mark!=0); void stop()Wait_mark=0;【运行结果】child process 1 is killed by parent!child process 2 is killed by parent!Parent process is killed!【分析】使用系统调用signal()都放在一段程序的前面部分,而不是在其他接收信号处。这是因为signal()的执行只是为进程指定信号量16或17的作用,以及分配相应的stop()过程连接的指针,从而,signal()函数必须在程序前面部分执行。编程实现例【任务】
10、在上面程序中,增加语句signal(SIGINT,SIG_IGN)、signal(SIGQUIT,SIG_IGN),观察执行结果,并分析原因。【程序】#include #include #include int pid1,pid2;int endflag=0,pf1=0,pf2=0;void intdelete() kill(pid1,16); kill(pid2,17); endflag=1;void int1() printf(“child process 1 is killed by parent!n”);exit(0);void int2() printf(“child process
11、 2 is killed by parent!n”);exit(0);main() int exitpid;signal(SIGINT,SIG_IGN);signal(SIGQUIT,SIG_IGN);while (pid1=fork()=-1);if (pid1=0) printf(“p1n”); signal(SIGUSER1,int1); signal(16,SIG_IGT) pause(); exit(0); elsewhile (pid2=fork()=-1); if (pid=0) printf(“p2n”); signal(SIGUSER2,int2); signal(17,SIG_IGT) pause(); exit(0); else printf
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026广东惠州市中心人民医院第五批住院医师规范化培训招聘1人模拟试卷(考点精练)附答案详解
- 2026上海交通大学中银科技金融学院产教融合发展中心招聘1名备考题库附答案详解【突破训练】
- 2026广东惠州市中心人民医院第五批住院医师规范化培训招聘1人模拟试卷及参考答案详解【预热题】
- 2026福建三明医学科技职业学院公开招聘助理岗位工作人员的(二)笔试题库含完整答案详解(有一套)
- 2026四川雅安市芦山县农业和文化旅游发展集团有限责任公司招聘9人考前冲刺试卷及答案详解(网校专用)
- 2026北京昌平实验室招聘科研专项主管备考题库完整附答案详解
- 2026上海中医药大学附属龙华医院科室科主任岗位招聘1人备考题库含完整答案详解(必刷)
- 2026济宁市国有资产投资控股有限公司社会招聘2人(第二批)笔试题库(有一套)附答案详解
- 2026浙江衢州市西安高腔传习所招聘编外人员9人考前冲刺密卷附完整答案详解(名校卷)
- 2026广东湛江市看守所招聘监区伙房工作人员3人笔试题库A4版附答案详解
- 2025年茶艺师(乌龙茶冲泡技艺)试题及答案
- 2026上海交通大学医学院附属瑞金医院医疗、其他岗位招聘模拟试卷【各地真题】附答案详解
- 2026年老旧小区水表改造外勤自来水公司招聘考试笔试试题(含答案)
- 《中医》考试题库-2026年山东医师定期考核
- 2026年内蒙古执业药师继续教育参考答案
- 2026年《综合基础知识》试题及一套参考答案详解
- 《习作 传承好家风》教案(2课时)-2026-2027学年统编版(新版)小学语文六年级上册
- DB43-T 2428-2022水利工程管理与保护范围划定技术规范
- 传染病学 06 艾滋病
- 高级英语课程教案-Face to Face with Hurricane Camille
- JJF 1119-2004电子水平尺校准规范
评论
0/150
提交评论